Maison > base de données > tutoriel mysql > Comment récupérer efficacement plusieurs agrégations de sommes avec le filtrage conditionnel dans MySQL ?

Comment récupérer efficacement plusieurs agrégations de sommes avec le filtrage conditionnel dans MySQL ?

Susan Sarandon
Libérer: 2025-01-21 12:45:10
original
781 Les gens l'ont consulté

How to Efficiently Retrieve Multiple Sum Aggregations with Conditional Filtering in MySQL?

MySQL : Récupérer efficacement plusieurs agrégations de sommes avec le filtrage conditionnel

Travailler avec des bases de données nécessite souvent de récupérer plusieurs ensembles de données en fonction de conditions variables. Cela peut être particulièrement complexe lorsqu'il s'agit de différentes valeurs de champ au sein d'une même requête.

Le défi :

Considérons un tableau transactions avec les colonnes id, account_id, budget_id, points et type. Le but est de récupérer, en une seule requête, la somme de points pour chaque budget_idtype est égal à « allocation », et séparément, la somme de pointstype est égal à « problème ».

La solution : tirer parti de la IF() fonction de MySQL

La fonction IF() de MySQL fournit une solution concise. Nous pouvons l'utiliser au sein d'un SUM() agrégat, combiné avec GROUP BY, pour obtenir le résultat souhaité :

<code class="language-sql">SELECT 
    budget_id, 
    SUM(IF(type = 'allocation', points, 0)) AS allocated,
    SUM(IF(type = 'issue', points, 0)) AS issued
FROM 
    transactions
GROUP BY 
    budget_id;</code>
Copier après la connexion

Répartition des requêtes :

  • IF(type = 'allocation', points, 0) : Cette expression conditionnelle vérifie chaque ligne. Si type est « allocation », il renvoie la valeur points ; sinon, il renvoie 0.
  • IF(type = 'issue', points, 0) : Cela reflète ce qui précède, mais pour type = 'problème'.
  • SUM(...) : La fonction SUM() calcule le total pour chaque expression conditionnelle, additionnant efficacement les points séparément pour les types « allocation » et « problème ».
  • GROUP BY budget_id : Cela regroupe les résultats par budget_id, fournissant les sommes agrégées pour chaque budget.

Exemple illustratif :

La requête, lorsqu'elle est exécutée sur la table transactions, peut produire un ensemble de résultats comme celui-ci :

<code>budget_id | allocated | issued
----------|-----------|--------
     434  |   200000  |   100
     242  |   100000  |  5020
     621  |    45000  |  3940</code>
Copier après la connexion

Cela démontre la récupération efficace de plusieurs ensembles de données agrégées avec un filtrage conditionnel distinct au sein d'une seule requête MySQL optimisée.

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