ホームページ  >  記事  >  データベース  >  MySQL で以前の値の合計がしきい値を超える行をクエリするにはどうすればよいですか?

MySQL で以前の値の合計がしきい値を超える行をクエリするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-05 01:35:01395ブラウズ

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

MySQL WHERE 句の SUM() を使用したクエリ

MySQL テーブルを操作する場合、集計計算に基づいて行を取得する必要がある場合があります。 、前の値の合計など。ただし、WHERE 句で SUM() を直接使用すると、期待した結果が得られない可能性があります。

列 "id" と "cash" を持つテーブルがあるとします。

id | cash
1    200
2    301
3    101
4    700

取得するにはWHERE SUM(cash) > を使用して、以前のすべての現金の合計が特定の値 (例: 500) を超える最初の行。 500 は期待どおりに機能しません。

HAVING 句を使用した解決策

MySQL では、WHERE 句ではなく HAVING 句での集計比較が可能です。望ましい結果を得るには、次のクエリを使用できます。

GROUP BY ...
HAVING SUM(cash) > 500

ただし、これには GROUP BY 句の定義が必要ですが、必要ない場合もあります。

ネストされたクエリの使用累計を含むサブクエリ

別のアプローチは、ネストされたサブクエリを使用して累計を計算し、それを 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

Inこのクエリでは、テーブル内の各行の累計を計算するためにサブクエリが使用されます。エイリアス running_total は、WHERE 句でこの値を参照するために使用されます。 LIMIT 句は、条件に一致する最初の行のみを返すために追加されます。

このアプローチにより、WHERE 句の集計値の直接比較が可能になり、GROUP BY 句を必要とせずに目的の結果が得られます。

以上がMySQL で以前の値の合計がしきい値を超える行をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。