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 :
points
pour chaque budget_id
où type
est « allocation ».points
pour chaque budget_id
où type
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!