Usare FILTER per riassumere dati

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 AS rinomina le colonne di output per una migliore leggibilità.
  • La query unisce la tabella user_options con la tabella users per accedere alle impostazioni e ai dati di attività dell’utente.
  • La condizione WHERE uo.user_id > 0 filtra 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.

4 Mi Piace