Maison  >  Article  >  base de données  >  Comment récupérer une ligne basée sur la somme des valeurs précédentes à l'aide de la fonction SUM() de MySQL ?

Comment récupérer une ligne basée sur la somme des valeurs précédentes à l'aide de la fonction SUM() de MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 16:00:03353parcourir

How to Retrieve a Row Based on the Sum of Previous Values Using MySQL's SUM() Function?

Utilisation de la fonction MySQL SUM() dans la clause WHERE pour la récupération de lignes

MySQL permet aux utilisateurs d'effectuer des calculs agrégés dans des sous-requêtes et de les utiliser comme critères pour la sélection de lignes dans la clause WHERE. Cependant, il est important de comprendre les limites de l'utilisation des fonctions d'agrégation dans ce contexte.

Considérez le scénario suivant : vous disposez d'une table avec les colonnes id et cash, et vous souhaitez récupérer la première ligne où la somme de toutes les valeurs de rachat précédentes dépasse un seuil spécifique.

Exemple de tableau :

id cash
1 200
2 301
3 101
4 700

Résultat souhaité :

Pour un seuil de saisie de 500, le résultat attendu est la ligne 3 car la somme des valeurs de trésorerie des lignes 1 et 2 (200 301 = 501) dépasse le seuil.

Approche incorrecte :

Tentative d'utiliser WHERE SUM(cash) > 500 ne donnera pas le résultat correct car les agrégats ne peuvent pas être directement comparés dans une clause WHERE.

Solution :

Pour surmonter cette limitation, vous pouvez utiliser la clause HAVING dans en conjonction avec une sous-requête pour calculer la somme cumulée des liquidités pour chaque ligne.

<code class="sql">SELECT y.id, y.cash
FROM (
    SELECT t.id,
           t.cash,
           (SELECT SUM(x.cash)
              FROM TABLE x
             WHERE x.id <= t.id) AS running_total
     FROM TABLE t
     ORDER BY t.id
) y
WHERE y.running_total > 500
ORDER BY y.id
LIMIT 1;</code>

Explication :

  1. La sous-requête calcule le total cumulé des liquidités pour chaque ligne à l'aide d'une instruction SELECT imbriquée.
  2. Le résultat de la sous-requête est alias y.
  3. La clause WHERE vérifie si le total cumulé d'une ligne dépasse le seuil souhaité (500 dans ce cas ).
  4. Enfin, la clause LIMIT récupère uniquement la première ligne qualifiante.

Cette approche garantit que la première ligne où la somme de toutes les valeurs de rachat précédentes dépasse le seuil est identifiée avec précision. .

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