Maison > base de données > tutoriel mysql > le corps du texte

Comment interroger les lignes où la somme des valeurs précédentes dépasse un seuil dans MySQL ?

Susan Sarandon
Libérer: 2024-11-05 01:35:01
original
394 Les gens l'ont consulté

How to Query for Rows Where the Sum of Previous Values Exceeds a Threshold in MySQL?

Requête avec SUM() dans la clause MySQL WHERE

Lorsque vous travaillez avec des tables MySQL, il peut être nécessaire de récupérer des lignes en fonction de calculs agrégés , comme la somme des valeurs précédentes. Cependant, utiliser SUM() directement dans une clause WHERE peut ne pas donner les résultats attendus.

Supposons que vous ayez une table avec les colonnes "id" et "cash":

id | cash
1    200
2    301
3    101
4    700
Copier après la connexion

Pour récupérer la première ligne où la somme de tous les espèces précédentes dépasse une valeur spécifique (par exemple, 500), en utilisant WHERE SUM(cash) > 500 ne fonctionnera pas comme prévu.

Solution utilisant la clause HAVING

MySQL permet des comparaisons globales dans la clause HAVING plutôt que dans la clause WHERE. Pour obtenir le résultat souhaité, vous pouvez utiliser la requête suivante :

GROUP BY ...
HAVING SUM(cash) > 500
Copier après la connexion

Cependant, cela nécessite de définir une clause GROUP BY, ce qui peut ne pas être nécessaire.

Utiliser un Nested Sous-requête avec total cumulé

Une approche alternative consiste à utiliser une sous-requête imbriquée pour calculer le total cumulé, puis à le comparer à la valeur spécifiée dans la clause WHERE :

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

Dans cette requête, une sous-requête est utilisée pour calculer le total cumulé pour chaque ligne du tableau. L'alias running_total est utilisé pour référencer cette valeur dans la clause WHERE. La clause LIMIT est ajoutée pour renvoyer uniquement la première ligne qui correspond à la condition.

Cette approche permet la comparaison directe de la valeur globale dans la clause WHERE et donne le résultat souhaité sans nécessiter une clause GROUP BY.

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