ホームページ >データベース >mysql チュートリアル >分析関数を使用せずにMySQLで累積合計を計算する方法?
SET を使用しない MySQL の累積合計
MySQL では、累積合計のような分析関数がないため、累計を計算しようとするときに課題が生じます。 。ただし、この機能をエミュレートするには 2 つのアプローチがあります。
相関サブクエリ
このアプローチでは、メイン クエリ内のサブクエリを利用して累積合計を取得します。ただし、特に複雑な結合を処理する場合は、リソースが大量に消費され、複雑になる可能性があります。
ユーザー変数
または、MySQL のユーザー変数を利用してコントロール ブレークを実行することもできます。処理。この方法では、元のクエリの結果を並べ替えて、それを外側のクエリでラップします。
外側のクエリ内:
次のロジックが適用されます:
ユーザー変数は、計算後に現在の ID と日の値で更新されます。
クエリの例
SELECT IF(@prev_id = c.id AND @prev_day = c.day, @cumtotal := @cumtotal + c.amount, @cumtotal := c.amount) AS cumulative_total, @prev_id := c.id AS `id`, @prev_day := c.day AS `day`, c.hr, c.amount AS `amount` FROM ( SELECT @prev_id := NULL, @prev_day := NULL, @cumtotal := 0 ) i JOIN ( select id, day, hr, amount from ( //multiple joins on multiple tables)a left join (//unions on multiple tables)b on a.id=b.id ORDER BY 1,2,3 ) c
列の順序を変更する必要がある場合変更:
SELECT d.id, d.day, d.hr, d.amount, d.cumulative_total FROM ( // query from above ) d
このアプローチは、MySQL 8.0 より前のバージョンに適しており、一連の行の累積合計を計算するための効率的なソリューションを提供できます。
以上が分析関数を使用せずにMySQLで累積合計を計算する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。