算出累積總計是一個常見的需求,可惜以 SQL 並沒有一個很直接的方式達到這個需求。要以 SQL 算出累積總計,基本上的概念與列出排名類似:第一是先做個表格自我連結 (Self Join),然後將結果依序列出。在做列出排名時,我們算出每一行之前 (包含那一行本身) 有多少行數;而在做累積總計時,我們則是算出每一行之前 (包含那一行本身) 的總合。

來看看以下的例子。假設我們有以下的表格:

Total_Sales 表格
 Name   Sales 
 John   10 
 Jennifer   15 
 Stella   20 
 Sophia   40 
 Greg   50 
 Jeff   20 

要算出累積總計,我們就鍵入以下的 SQL 語句:

SELECT a1.Name, a1.Sales, SUM(a2.Sales) Running_Total
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales <= a2.Sales OR (a1.Sales=a2.Sales AND a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;

結果:

Name Sales Running_Total
Greg 50 50
Sophia 40 90
Stella 20 110
Jeff 20 130
Jennifer 15 145
John 10 155

在以上的 SQL 語句中, WHERE 子句和 ORDER BY 子句讓我們能夠在有重複值時能夠算出正確的累積總計。

下一頁:SQL 總合百分比

本頁最近於 2022年6月13日更新



Copyright © 2022   1keydata.com   版權所有