Comptez efficacement le nombre d'occurrences dans les données groupées PostgreSQL
PostgreSQL fournit diverses méthodes pour compter les occurrences de données dans des tables groupées. Par exemple, vous pouvez utiliser l'instruction CASE WHEN pour compter des valeurs spécifiques :
<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>
Cependant, lorsque le nombre de valeurs possibles augmente, l'utilisation de l'instruction CASE WHEN devient de plus en plus lourde. Dans PostgreSQL 9.4 et versions ultérieures, l'option globale FILTER fournit une solution plus propre et potentiellement plus rapide :
<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>
Par souci de concision, une syntaxe simplifiée peut être utilisée :
<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>
Pour les grandes listes d'options, la fonction crosstab()
propose une alternative plus performante :
<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>
En résumé, PostgreSQL fournit plusieurs méthodes pour le comptage SQL conditionnel. L'option FILTER offre une solution concise et efficace, tandis que la fonction crosstab()
offre les meilleures performances pour gérer un grand nombre d'options.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!