Verwenden von FILTER zum Zusammenfassen von Daten

Übersicht

In diesem Bericht untersuchen wir eine SQL-Abfrage, die die FILTER-Funktion verwendet, um Benutzerdaten basierend auf ihren Einstellungen für Aktivitätszusammenfassungen zu segmentieren. Die FILTER-Funktion ist ein leistungsstarkes Werkzeug in SQL, das eine bedingte Aggregation innerhalb einer einzigen Abfrage ermöglicht und eine Möglichkeit bietet, Aggregatfunktionen wie COUNT(), SUM(), AVG() usw. auf eine Teilmenge von Daten anzuwenden.

Die SQL-Abfrage erklärt

Die bereitgestellte SQL-Abfrage zählt die Anzahl der Benutzer mit unterschiedlichen Einstellungen für Aktivitätszusammenfassungen. Hier ist eine Aufschlüsselung jedes Teils der Abfrage:

SELECT 
    COUNT(*) FILTER (WHERE uo.email_digests = false) AS "Disabled",
    COUNT(*) FILTER (WHERE uo.email_digests = true) AS "Total Enabled",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND u.last_seen_at > CURRENT_DATE - INTERVAL '180 DAYS') AS "Skipped",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 30) AS "Half Hourly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 60 ) AS "Hourly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 1440) AS "Daily",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 10080) AS "Weekly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 43200) AS "Monthly",
    COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 259200) AS "6 Monthly"
FROM user_options uo
  JOIN users u ON u.id = uo.user_id
WHERE uo.user_id > 0
  • COUNT(*) FILTER (WHERE bedingung) zählt die Anzahl der Zeilen, die der angegebenen Bedingung entsprechen.
  • Die Klausel AS benennt die Ausgabespalten zur besseren Lesbarkeit um.
  • Die Abfrage verknüpft die Tabelle user_options mit der Tabelle users, um auf Benutzereinstellungen und Aktivitätsdaten zuzugreifen.
  • Die Bedingung WHERE uo.user_id > 0 filtert Systembenutzer oder nicht standardmäßige Einträge heraus.

Funktionsweise der FILTER-Funktion

Die FILTER-Funktion wird in Verbindung mit einer Aggregatfunktion verwendet, um nur die Zeilen zu zählen, die bestimmte Kriterien erfüllen. Sie ist eine besser lesbare und oft effizientere Alternative zur Verwendung von Unterabfragen oder CASE-Anweisungen für die bedingte Aggregation.

Hier ist die allgemeine Syntax für die Verwendung von FILTER:

AGGREGATE_FUNCTION(column_name) FILTER (WHERE bedingung) AS alias_name

Wann die FILTER-Funktion verwendet werden sollte

Die FILTER-Funktion ist besonders nützlich, wenn Sie mehrere Zählungen (oder andere Aggregationen) mit unterschiedlichen Bedingungen in einer einzigen Abfrage durchführen müssen. Sie vereinfacht die Abfrage und vermeidet die Notwendigkeit mehrerer Unterabfragen oder komplexer CASE-Anweisungen.

Sie könnten die FILTER-Funktion verwenden, um Benutzer nach ihren Präferenzen, Beiträge nach ihren Reaktionen oder Themen nach ihren Kategorien zu segmentieren, unter anderem. Es ist ein vielseitiges Werkzeug, das die Datenberichterstattung und -analyse verbessern kann.

Schlussfolgerung

Die FILTER-Funktion ist eine wertvolle Ergänzung für jedes SQL-Toolkit. Sie ermöglicht eine klare und prägnante bedingte Aggregation, wodurch komplexe Datenabfragen besser handhabbar und verständlicher werden.

4 „Gefällt mir“