最近,我一直在學習如何使用 SQL 來處理資料。通常,我會為此目的使用 Python,但這些類需要 SQL,而且我仍然很難在更復雜的場景中舒適地使用它。
我想要實作的結果與 Excel 中的以下螢屏截圖相同:
Excel 中的行為,我想在 SQL 中實作
我在 Excel 中使用的公式:
=SUMIF(B$2:B2;B2;C$2:C2)
表格樣本:
> select * from orders limit 5;
------------ --------------- ---------
| ID | clientID | tonnage |
------------ --------------- ---------
| 2005-01-01 | 872-13-44-365 | 10 |
| 2005-01-04 | 369-43-03-176 | 2 |
| 2005-01-05 | 408-24-90-350 | 2 |
| 2005-01-10 | 944-16-93-033 | 5 |
| 2005-01-11 | 645-32-78-780 | 14 |
------------ --------------- ---------
該實作應該回傳與以下group by查詢類似的結果:
select
orders.clientID as ID,
sum(orders.tonnage) as Tonnage
from orders
group by orders.clientID;
也就是說,回傳每個客戶購買了多少,但同時我希望它將添加的每個步驟作為單獨的記錄回傳。
例如:
客戶 A 在第一個訂單中購買了 350,然后在第二個訂單中購買了 231。
在這種情況下,查詢將回傳如下內容:
client A - 350 - 350 // first order
client A - 281 - 581 // second order
示例,它在 Excel 中的外觀
我已經嘗試過使用類似的東西:
select
orders.clientID as ID,
sum(case when orders.clientID = <ID> then orders.tonnage end)
from orders;
但是很快就卡住了,因為我需要以某種方式動態地改變它<ID>并將它的值存盤在某種臨時變數中,我真的不知道如何在 SQL 中實作這樣的東西。
uj5u.com熱心網友回復:
您可以使用視窗函式來運行求和。
在你的情況下,像這樣使用
select id, clientID, sum(tonnage) over (partition by clientID order by id) tonnageRunning
from orders
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=13a8c2d46b5ac22c5c120ac937bd6e7a
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/443975.html
上一篇:通過Vba回圈保存Excel行
