Esta é uma versão SQL do Relatório de Painel para Principais Usuários por Curtidas Recebidas de uma Variedade de Pessoas.
Este relatório de painel mostra os principais usuários que receberam curtidas de uma ampla gama de usuários de um site, em um intervalo de datas especificado. A consulta foi projetada para descobrir quais usuários receberam o maior número de curtidas em suas postagens, com cada contagem de curtidas representando o número de usuários exclusivos que curtiram suas postagens.
--[params]
--date :start_date = 2024-01-01
--date :end_date = 2025-01-01
SELECT
p.user_id,
u.username,
COUNT(DISTINCT ua.user_id) AS likes
FROM
user_actions ua
INNER JOIN posts p ON p.id = ua.target_post_id
INNER JOIN users u ON p.user_id = u.id
WHERE
ua.created_at::date BETWEEN :start_date AND :end_date
AND ua.action_type = 1
AND p.user_id > 0
GROUP BY
p.user_id,
u.username
ORDER BY
likes DESC
Explicação da Consulta SQL
- Parâmetros de Data:
- A consulta aceita dois parâmetros,
:start_datee:end_date, que definem o intervalo de datas para o relatório. Ambos os parâmetros de data aceitam o formato de dataAAAA-MM-DD.
- A consulta aceita dois parâmetros,
- Seleção: As principais colunas selecionadas para a saída são:
p.user_id: O ID do usuário do autor da postagem.u.username: O nome do usuário correspondente.likes: Uma contagem dos IDs de usuário distintos (ua.user_id) que ‘curtiram’ as postagens, garantindo que as curtidas exclusivas por usuário sejam calculadas.
- Junções: Existem duas junções internas:
user_actions uacomposts p: Corresponde às ações às suas postagens correspondentes.posts pcomusers u: Conecta as postagens aos seus autores, facilitando a recuperação de informações do usuário.
- Filtragem:
- A cláusula
WHEREaplica vários filtros:ua.created_at::date BETWEEN :start_date AND :end_datelimita as ações consideradas àquelas dentro dos parâmetros.ua.action_type = 1isola as ações de ‘curtir’ de outros tipos de ações do usuário.p.user_id > 0exclui quaisquer curtidas associadas a usuários não registrados (como usuários do sistema ou anônimos).
- A cláusula
- Agrupamento:
- O conjunto de resultados é agrupado por
p.user_ideu.username. Isso garante que as curtidas sejam agregadas por usuário e nome de usuário correspondente.
- O conjunto de resultados é agrupado por
- Ordenação:
- Os resultados são ordenados pela contagem de curtidas (
likes DESC), apresentando primeiro os usuários mais apreciados.
- Os resultados são ordenados pela contagem de curtidas (
Exemplo de Resultados
| usuário | nome de usuário | curtidas |
|---|---|---|
| user1 | user1 | 100 |
| user2 | user2 | 90 |
| user3 | user3 | 80 |
| … | … | … |