Panoramica
In questo report, esploreremo una query SQL che utilizza la funzione FILTER per segmentare i dati degli utenti in base alle preferenze del loro riepilogo di attività. La funzione FILTER è uno strumento potente in SQL che consente l’aggregazione condizionale all’interno di una singola query, fornendo un modo per applicare funzioni aggregate come COUNT(), SUM(), AVG(), ecc., a un sottoinsieme di dati.
La query SQL spiegata
La query SQL fornita conta il numero di utenti con diverse impostazioni di riepilogo dell’attività. Ecco una ripartizione di ogni parte della query:
SELECT
COUNT(*) FILTER (WHERE uo.email_digests = false) AS "Disabilitato",
COUNT(*) FILTER (WHERE uo.email_digests = true) AS "Abilitati Totali",
COUNT(*) FILTER (WHERE uo.email_digests = true AND u.last_seen_at > CURRENT_DATE - INTERVAL '180 DAYS') AS "Saltati",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 30) AS "Ogni Mezz'ora",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 60 ) AS "Orario",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 1440) AS "Giornaliero",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 10080) AS "Settimanale",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 43200) AS "Mensile",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 259200) AS "6 Mensile"
FROM user_options uo
JOIN users u ON u.id = uo.user_id
WHERE uo.user_id > 0
COUNT(*) FILTER (WHERE condition)conta il numero di righe che soddisfano la condizione specificata.- La clausola
ASrinomina le colonne di output per una migliore leggibilità. - La query unisce la tabella
user_optionscon la tabellausersper accedere alle impostazioni e ai dati di attività dell’utente. - La condizione
WHERE uo.user_id > 0filtra gli utenti di sistema o le voci non standard.
Come funziona la funzione FILTER
La funzione FILTER viene utilizzata in combinazione con una funzione aggregata per contare solo le righe che soddisfano criteri specifici. È un’alternativa più leggibile e spesso più efficiente all’uso di sottoquery o istruzioni CASE per l’aggregazione condizionale.
Ecco la sintassi generale per l’utilizzo di FILTER:
AGGREGATE_FUNCTION(column_name) FILTER (WHERE condition) AS alias_name
Quando utilizzare la funzione FILTER
La funzione FILTER è particolarmente utile quando è necessario eseguire più conteggi (o altre aggregazioni) con condizioni diverse in un’unica query. Semplifica la query ed evita la necessità di più sottoquery o complesse istruzioni CASE.
Potresti utilizzare la funzione FILTER per segmentare gli utenti in base alle loro preferenze, i post in base alle loro reazioni o gli argomenti in base alle loro categorie, tra gli altri casi d’uso. È uno strumento versatile che può migliorare il reporting e l’analisi dei dati.
Conclusione
La funzione FILTER è una preziosa aggiunta a qualsiasi toolkit SQL. Consente un’aggregazione condizionale chiara e concisa, rendendo le query di dati complesse più gestibili e comprensibili.