Maison >base de données >tutoriel mysql >Comment puis-je compter efficacement les occurrences de données dans SQL avec plusieurs conditions ?
Méthode de comptage de conditions SQL efficace
En SQL, il existe de nombreuses façons de regrouper et de compter les occurrences de données selon une colonne spécifique. Dans PostgreSQL, le moyen le plus simple consiste à utiliser une expression CASE, comme indiqué dans l'exemple de requête. Cependant, cette approche peut devenir lourde lorsqu’il s’agit d’un grand nombre de valeurs possibles.
PostgreSQL 9.4 et versions ultérieures fournissent une méthode plus optimisée et flexible : l'FILTER
option d'agrégation. La clause FILTER
vous permet d'appliquer des conditions supplémentaires à une fonction d'agrégation, en comptant uniquement les valeurs spécifiques qui correspondent à une condition spécifique.
<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>
Cette requête compte effectivement les occurrences de zéro, un et deux dans la colonne question1, regroupées par la colonne catégorie.
Pour une optimisation plus poussée, la version courte suivante 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 scénarios complexes impliquant plusieurs conditions ou un grand nombre d'options, la fonction crosstab()
offre d'excellentes performances et simplicité :
<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>
Cette crosstab
requête produit un ensemble de résultats contenant tous les décomptes requis, présentés sous forme de colonnes nommées pour un accès et une analyse faciles.
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!