Maison >base de données >tutoriel mysql >Comment MySQL peut-il réaliser efficacement des agrégations conditionnelles sans prise en charge directe de « SUM IF » et « COUNT IF » ?
Solution élégante : surmonter les limitations de « SUM IF » et « COUNT IF » dans MySQL
Malgré leur utilité, MySQL manque de support direct pour les fonctions 'SUM IF' et 'COUNT IF'. Cette limitation peut souvent s’avérer frustrante lorsqu’il s’agit d’agrégations conditionnelles. Cependant, il existe une solution élégante utilisant les instructions CASE.
Considérons le scénario suivant :
| id | hour | kind | |---|---|---| | 1 | 10 | 1 | | 2 | 15 | 2 | | 3 | 20 | 1 | | 4 | 25 | 3 |
L'objectif est de calculer :
Tentatives originales et réponse de MySQL :
Les tentatives initiales utilisant 'SUM( IF(...) )' ou 'COUNT( IF(. ..) )' entraîne une erreur. MySQL ne permet pas de mélanger des fonctions d'agrégation avec des structures de contrôle telles que « IF ».
Solution utilisant l'instruction CASE :
L'instruction CASE fournit une expression conditionnelle pour évaluer et renvoyer dynamiquement valeurs. Il peut être utilisé pour réaliser efficacement les agrégations conditionnelles souhaitées. Voici comment :
SELECT count(id), SUM(hour) as totHour, SUM(case when kind = 1 then 1 else 0 end) as countKindOne
Cette requête effectue les opérations suivantes :
Sortie :
| count(id) | totHour | countKindOne | |---|---|---| | 4 | 70 | 2 |
En utilisant l'instruction CASE, nous pouvons élégamment surmontez les limitations de « SUM IF » et « COUNT IF » dans MySQL, permettant des agrégations conditionnelles efficaces.
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!