Maison > base de données > tutoriel mysql > Comment puis-je compter efficacement les occurrences de données dans SQL avec plusieurs conditions ?

Comment puis-je compter efficacement les occurrences de données dans SQL avec plusieurs conditions ?

Susan Sarandon
Libérer: 2025-01-24 06:27:11
original
811 Les gens l'ont consulté

How Can I Efficiently Count Data Occurrences in SQL with Multiple 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'FILTERoption 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.

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;
Copier après la connexion

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 :

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;
Copier après la connexion

Pour les scénarios complexes impliquant plusieurs conditions ou un grand nombre d'options, la fonction crosstab() offre d'excellentes performances et simplicité :

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);
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal