Maison > Article > base de données > Comment récupérer la première ligne où la somme des valeurs dépasse un seuil dans MySQL ?
MySQL fournit la fonction d'agrégation SUM() pour calculer la somme des valeurs dans une colonne. Bien que SUM() soit couramment utilisé dans les requêtes SELECT pour obtenir des résultats agrégés, il peut également être utilisé dans les clauses WHERE avec certaines limitations.
Dans le scénario donné, l'objectif est de récupérer la première ligne d'une table où la somme des valeurs de rachat des lignes précédentes dépasse un seuil spécifié. L'utilisation de "WHERE SUM(cash) > 500" dans la clause WHERE ne donnera pas le résultat souhaité car les agrégats ne peuvent pas être directement comparés dans ce contexte.
Pour obtenir la fonctionnalité souhaitée, la clause HAVING doit être utilisée dans en conjonction avec la clause GROUP BY. Cependant, la clause HAVING nécessite une définition de clause GROUP BY. Par conséquent, dans ce cas, le regroupement n'aurait pas de sens.
La solution consiste à utiliser une sous-requête imbriquée dans la clause WHERE. Cette approche nous permet de calculer le total cumulé des valeurs de rachat jusqu'à chaque ligne, puis d'utiliser cette valeur dans la comparaison. La requête suivante accomplit cela :
<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>
En référençant l'alias de colonne "running_total" dans la clause WHERE, nous pouvons comparer le total cumulé au seuil spécifié. La clause LIMIT garantit que seule la première ligne répondant aux critères est renvoyée.
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!