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