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
Libérer: 2025-01-21 12:36:10
original
408 Les gens l'ont consulté

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

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

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