Ü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
ASbenennt die Ausgabespalten zur besseren Lesbarkeit um. - Die Abfrage verknüpft die Tabelle
user_optionsmit der Tabelleusers, um auf Benutzereinstellungen und Aktivitätsdaten zuzugreifen. - Die Bedingung
WHERE uo.user_id > 0filtert 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.