Heim >Datenbank >MySQL-Tutorial >Wie kann ich Datenvorkommen in SQL mit mehreren Bedingungen effizient zählen?
Effiziente SQL-Bedingungszählmethode
In SQL gibt es viele Möglichkeiten, das Vorkommen von Daten nach einer bestimmten Spalte zu gruppieren und zu zählen. In PostgreSQL ist die Verwendung eines CASE-Ausdrucks die einfachste Möglichkeit, wie in der Beispielabfrage gezeigt. Dieser Ansatz kann jedoch umständlich werden, wenn es um eine große Anzahl möglicher Werte geht.
PostgreSQL 9.4 und höher bietet eine optimiertere und flexiblere Methode: die FILTER
Aggregationsoption. Mit der FILTER
-Klausel können Sie zusätzliche Bedingungen auf eine Aggregatfunktion anwenden und nur bestimmte Werte zählen, die einer bestimmten Bedingung entsprechen.
<code class="language-sql">SELECT category , count(*) FILTER (WHERE question1 = 0) AS zero , count(*) FILTER (WHERE question1 = 1) AS one , count(*) FILTER (WHERE question1 = 2) AS two FROM reviews GROUP BY 1;</code>
Diese Abfrage zählt effektiv die Vorkommen von null, eins und zwei in der Spalte „Frage1“, gruppiert nach der Kategoriespalte.
Zur weiteren Optimierung kann folgende Kurzfassung verwendet werden:
<code class="language-sql">SELECT category , count(question1 = 0 OR NULL) AS zero , count(question1 = 1 OR NULL) AS one , count(question1 = 2 OR NULL) AS two FROM reviews GROUP BY 1;</code>
Für komplexe Szenarien mit mehreren Bedingungen oder einer großen Anzahl von Optionen bietet die Funktion crosstab()
hervorragende Leistung und Einfachheit:
<code class="language-sql">SELECT * FROM crosstab( 'SELECT category, question1, count(*) AS ct FROM reviews GROUP BY 1, 2 ORDER BY 1, 2' , 'VALUES (0), (1), (2)' ) AS ct (category text, zero int, one int, two int);</code>
Diese crosstab
-Abfrage erzeugt einen Ergebnissatz mit allen erforderlichen Zählungen, der für einen einfachen Zugriff und eine einfache Analyse als benannte Spalten dargestellt wird.
Das obige ist der detaillierte Inhalt vonWie kann ich Datenvorkommen in SQL mit mehreren Bedingungen effizient zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!