Zählen Sie effizient die Anzahl der Vorkommen in gruppierten PostgreSQL-Daten
PostgreSQL bietet eine Vielzahl von Methoden zum Zählen des Vorkommens von Daten in gruppierten Tabellen. Sie können beispielsweise die CASE WHEN-Anweisung verwenden, um bestimmte Werte zu zählen:
<code class="language-sql">SELECT sum(CASE WHEN question1 = 0 THEN 1 ELSE 0 END) AS ZERO, sum(CASE WHEN question1 = 1 THEN 1 ELSE 0 END) AS ONE, sum(CASE WHEN question1 = 2 THEN 1 ELSE 0 END) AS TWO, category FROM reviews GROUP BY category</code>
Wenn jedoch die Anzahl der möglichen Werte zunimmt, wird die Verwendung der CASE WHEN-Anweisung immer umständlicher. In PostgreSQL 9.4 und höher bietet die Option „Aggregate FILTER“ eine sauberere und möglicherweise schnellere Lösung:
<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>
Der Kürze halber kann eine vereinfachte Syntax 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 große Optionslisten bietet die Funktion crosstab()
eine leistungsfähigere Alternative:
<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>
Zusammenfassend stellt PostgreSQL mehrere Methoden für die bedingte SQL-Zählung bereit. Die Option FILTER bietet eine übersichtliche und effiziente Lösung, während die Funktion crosstab()
die beste Leistung für die Handhabung einer großen Anzahl von Optionen bietet.
Das obige ist der detaillierte Inhalt vonWie kann man Vorkommen in gruppierten Daten mit PostgreSQL optimal zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!