ホームページ > データベース > mysql チュートリアル > MySQL の SUM() 関数を使用して前の値の合計に基づいて行を取得するにはどうすればよいですか?

MySQL の SUM() 関数を使用して前の値の合計に基づいて行を取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-04 16:00:03
オリジナル
399 人が閲覧しました

How to Retrieve a Row Based on the Sum of Previous Values Using MySQL's SUM() Function?

行取得の WHERE 句で MySQL SUM() 関数を使用する

MySQL では、ユーザーがサブクエリ内で集計計算を実行し、それを基準として使用できるようにしますWHERE 句での行選択の場合。ただし、このコンテキストでの集計関数の使用の制限を理解することが重要です。

次のシナリオを考えてみましょう。列 id とCash を持つテーブルがあり、合計が含まれる最初の行を取得したいとします。以前のすべての現金価値が特定のしきい値を超えています。

テーブルの例:

id cash
1 200
2 301
3 101
4 700

望ましい結果:

入力しきい値が 500 の場合、行 1 と 2 の現金価値の合計 (200 301 = 501) がしきい値を超えているため、期待される結果は行 3 になります。

間違ったアプローチ:

WHERE SUM(cash) を使用しようとしています> WHERE 句では集計を直接比較できないため、500 では正しい結果が得られません。

解決策:

この制限を克服するには、次の HAVING 句を使用します。サブクエリと組み合わせて、各行の現金の累計を計算します。

<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>
ログイン後にコピー

説明:

  1. サブクエリは、次の現金の累計を計算します。ネストされた SELECT ステートメントを使用して各行を実行します。
  2. サブクエリの結果は y としてエイリアス化されます。
  3. WHERE 句は、行の累計が目的のしきい値 (この場合は 500) を超えているかどうかをチェックします。 ).
  4. 最後に、LIMIT 句は最初の条件を満たす行のみを取得します。

このアプローチにより、以前のすべての現金価値の合計がしきい値を超える最初の行が正確に識別されます。 .

以上がMySQL の SUM() 関数を使用して前の値の合計に基づいて行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート