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 サイトの他の関連記事を参照してください。