MySQL 中不使用SET 的累積總和
在MySQL 中,缺乏像累積總和這樣的分析函數在嘗試計算運行總計時帶來了挑戰。但是,有兩種方法可以模擬此功能。
相關子查詢
此方法利用主查詢中的子查詢來取得累積和。然而,它可能是資源密集且複雜的,尤其是在處理複雜的連接時。
使用者變數
或者,可以利用 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
此方法適用於8.0 之前的MySQL 版本,可以為計算一組行的累積和提供有效的解決方案。
以上是如何在不使用解析函數的情況下計算MySQL中的累積和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!