計算 MySQL 中行集的累積和
您面臨的任務是取得集合中特定列的運行聚合MySQL 中的行數。挑戰在於 MySQL 8.0 之前的版本缺乏內建分析函數。
使用使用者變數的方法
在這種情況下,您可以使用使用者變數模擬分析函數的功能。這涉及將原始查詢包裝在另一個查詢中,並利用 ORDER BY 順序處理行。
外部查詢檢查目前行的 id 和 day 值是否與前一行的值相符。如果是這樣,則透過新增目前行中的金額來更新累計總計。如果沒有,則累積總數將重設並設定為目前行的金額。
範例查詢
以下範例查詢示範了此方法:
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 , @subtotal := 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 版本中計算運行總計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!