Maison >base de données >tutoriel mysql >Comment effectuer une agrégation conditionnelle avec SUM et COUNT dans MySQL ?

Comment effectuer une agrégation conditionnelle avec SUM et COUNT dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 07:32:02666parcourir

How to Perform Conditional Aggregation with SUM and COUNT in MySQL?

Agrégation conditionnelle avec SUM et COUNT dans MySQL

Lorsque vous travaillez avec des bases de données relationnelles, il est souvent nécessaire d'effectuer des agrégations conditionnelles pour résumer les données en fonction sur des critères précis. MySQL propose plusieurs façons d'y parvenir, y compris l'utilisation des instructions IF() et CASE.

Utilisation de l'instruction IF()

Dans votre exemple, vous avez tenté pour utiliser l'instruction IF() pour calculer le nombre de lignes où kind est égal à 1. Cependant, MySQL n'autorise pas l'utilisation de l'instruction IF() dans les fonctions d'agrégation comme SUM et COUNT. En effet, IF() renvoie une valeur scalaire, tandis que les fonctions d'agrégation nécessitent une expression de colonne en entrée.

À l'aide de l'instruction CASE

Pour effectuer une agrégation conditionnelle, vous pouvez utilisez l'instruction CASE. L'instruction CASE vous permet de spécifier plusieurs conditions et de renvoyer différentes valeurs en fonction de ces conditions.

La requête suivante utilise l'instruction CASE pour calculer le nombre de lignes où kind est égal à 1 :

SELECT
    COUNT(id),
    SUM(hour) AS totHour,
    SUM(CASE
        WHEN kind = 1 THEN 1
        ELSE 0
    END) AS countKindOne
FROM your_table;

Dans cette requête :

  • L'instruction CASE est utilisée pour évaluer la condition kind = 1.
  • Si la condition est VRAIE, elle renvoie 1.
  • Si la condition est FALSE, elle renvoie 0.
  • Le résultat de l'instruction CASE est ensuite transmis à la fonction d'agrégation SUM().

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:
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