Maison >base de données >tutoriel mysql >Comment récupérer deux ensembles de données distincts avec une agrégation conditionnelle dans une seule requête SQL ?

Comment récupérer deux ensembles de données distincts avec une agrégation conditionnelle dans une seule requête SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-21 12:36:10457parcourir

How to Retrieve Two Distinct Data Sets with Conditional Aggregation in a Single SQL Query?

Récupérer efficacement deux ensembles de données distincts à l'aide d'une seule requête SQL

Cet exemple montre comment récupérer deux ensembles de données distincts à partir d'une seule requête SQL, évitant ainsi d'avoir recours à plusieurs requêtes. Nous utiliserons un tableau transactions (contenant les colonnes id, account_id, budget_id, points et type) pour illustrer. Le but est d'obtenir :

  1. Le total points pour chaque budget_idtype est « allocation ».
  2. Le total points pour chaque budget_idtype est « problème ».

La solution : l'agrégation conditionnelle

Une seule requête SQL peut y parvenir en utilisant l'agrégation conditionnelle :

<code class="language-sql">SELECT 
    budget_id,
    SUM(CASE WHEN type = 'allocation' THEN points ELSE 0 END) AS allocated_points,
    SUM(CASE WHEN type = 'issue' THEN points ELSE 0 END) AS issued_points
FROM 
    transactions
GROUP BY 
    budget_id;</code>

Cette requête utilise l'instruction CASE (ou IF dans certains systèmes de bases de données) pour additionner conditionnellement le points. Si type est 'allocation', les points sont ajoutés à allocated_points ; sinon, 0 est ajouté. La même logique s’applique à issued_points. La clause GROUP BY garantit que les sommes sont calculées pour chaque budget_id unique.

Résultat attendu :

La requête renverra un ensemble de résultats similaire à celui-ci :

<code>budget_id | allocated_points | issued_points
----------|-------------------|---------------
    434   |       200000      |     100
    242   |       100000      |     5020
    621   |        45000      |     3940</code>

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