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 ?

Comment récupérer la première ligne où la somme des valeurs dépasse un seuil dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 01:35:30939parcourir

How to Retrieve the First Row Where the Sum of Values Exceeds a Threshold in MySQL?

Utiliser WHERE SUM() pour récupérer des données spécifiques 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!

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