Compter efficacement les occurrences conditionnelles en SQL
Ce guide explore différentes méthodes pour compter les occurrences de données conditionnelles dans les requêtes SQL, regroupées par une colonne spécifique. L'approche optimale dépend de votre système de base de données.
PostgreSQL 9.4 et versions ultérieures : FILTER
Clause
PostgreSQL 9.4 et versions ultérieures offrent la solution la plus efficace et la plus lisible en utilisant la clause FILTER
dans la fonction d'agrégation COUNT
:
<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 category;</code>
Alternative concise pour PostgreSQL
Une syntaxe plus courte permet d'obtenir le même résultat :
<code class="language-sql">SELECT category, COUNT(CASE WHEN question1 = 0 THEN 1 END) AS zero, COUNT(CASE WHEN question1 = 1 THEN 1 END) AS one, COUNT(CASE WHEN question1 = 2 THEN 1 END) AS two FROM reviews GROUP BY category;</code>
Tableau croisé optimal pour des données étendues
Pour les requêtes croisées complètes, notamment avec de nombreuses catégories, la fonction crosstab()
offre des performances supérieures :
<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); ``` This approach dynamically handles a larger number of categories more efficiently than the previous methods.</code>
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!