Questa è una versione SQL del report della dashboard per i migliori utenti per Mi piace ricevuti da una varietà di persone.
Questo report della dashboard mostra i migliori utenti che hanno ricevuto mi piace da un’ampia gamma di utenti di un sito, in un intervallo di date specificato. La query è progettata per scoprire quali utenti hanno ricevuto più mi piace ai loro post, con ogni conteggio di mi piace che rappresenta il numero di utenti univoci che hanno messo mi piace ai loro post.
--[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
Spiegazione della query SQL
- Parametri data:
- La query accetta due parametri,
:start_datee:end_date, che definiscono l’intervallo di date per il report. Entrambi i parametri data accettano il formato dataAAAA-MM-GG.
- La query accetta due parametri,
- Selezione: Le colonne principali selezionate per l’output sono:
p.user_id: L’ID utente del poster.u.username: Il nome dell’utente corrispondente.likes: Un conteggio degli ID utente distinti (ua.user_id) che hanno messo “mi piace” ai post, garantendo il calcolo dei mi piace univoci per utente.
- Join: Ci sono due join interni:
user_actions uaconposts p: Corrisponde alle azioni ai loro post corrispondenti.posts pconusers u: Collega i post ai loro autori, facilitando il recupero delle informazioni sull’utente.
- Filtraggio:
- La clausola
WHEREapplica diversi filtri:ua.created_at::date BETWEEN :start_date AND :end_datelimita le azioni considerate a quelle all’interno dei parametri.ua.action_type = 1isola le azioni di “mi piace” da altri tipi di azioni utente.p.user_id > 0esclude eventuali mi piace associati a utenti non registrati (come utenti di sistema o anonimi).
- La clausola
- Raggruppamento:
- Il set di risultati è raggruppato per
p.user_ideu.username. Ciò garantisce che i mi piace vengano aggregati per utente e nome utente corrispondente.
- Il set di risultati è raggruppato per
- Ordinamento:
- I risultati sono ordinati per conteggio dei mi piace (
likes DESC), presentando prima gli utenti più apprezzati.
- I risultati sono ordinati per conteggio dei mi piace (
Esempio di risultati
| utente | username | mi piace |
|---|---|---|
| user1 | user1 | 100 |
| user2 | user2 | 90 |
| user3 | user3 | 80 |
| … | … | … |