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 » ?

Comment MySQL peut-il réaliser efficacement des agrégations conditionnelles sans prise en charge directe de « SUM IF » et « COUNT IF » ?

Susan Sarandon
Libérer: 2024-11-15 00:58:02
original
744 Les gens l'ont consulté

How can MySQL effectively achieve conditional aggregations without direct support for 'SUM IF' and '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 |
Copier après la connexion

L'objectif est de calculer :

  • Le nombre total d'enregistrements
  • Le nombre total d'heures
  • Le nombre d'enregistrements où « genre » est égal à 1

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

Cette requête effectue les opérations suivantes :

  • count(id) : compte le nombre total d'enregistrements.
  • SUM(hour) : Calcule le nombre total d'heures.
  • SUM(case when kind = 1 then 1 else 0 end) : utilise une instruction CASE pour compter conditionnellement le nombre d'enregistrements où « genre » est égal à 1.

Sortie :

| count(id) | totHour | countKindOne |
|---|---|---|
| 4 | 70 | 2 |
Copier après la connexion

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!

source:php.cn
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