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
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
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
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!