[英]SQL SUM multiple columns and match based on multiple values in one column
[英]SQL: Sum a column into multiple columns based on another column
我在PostgreSQL中有一個表,看起來像這樣:
Date Amount Type
2020-01-10 100 A
2020-01-10 150 B
2020-01-10 120 A
2020-01-10 90 B
2020-01-11 80 B
2020-01-11 120 A
2020-01-11 90 B
我想運行一個查詢,該查詢將根據類型輸出分割天數的總和,並計算總數,以便它輸出類似這樣的內容
Date A_Sum B_Sum Total
2020-01-10 220 240 460
2020-01-11 120 170 290
到目前為止,我編寫的 SQL 代碼有效,但我發現它在多個子查詢上運行時效率非常低。
SELECT, q.A_Sum, q.B_Sum, q.A_Sum + q.B_Sum AS Total FROM
(
SELECT DISTINCT date,
(SELECT SUM(amount) FROM table WHERE type='A' AND date=t.date) AS A_Sum,
(SELECT SUM(amount) FROM table WHERE type='B' AND date=t.date) AS B_Sum
FROM table t
) q
有沒有更好更有效的方法來獲得相同的輸出? 如何? 正如我確實注意到運行此查詢往往需要更長的時間,我希望加快速度。
使用條件聚合——在 Postgres 中,使用filter
:
SELECT date,
SUM(amount) FILTER (WHERE type = 'A') as a_sum,
SUM(amount) FILTER (WHERE type = 'B') as b_sum,
SUM(amount) as total
FROM table t
GROUP BY date;
目前尚不清楚總數是否只是“A”和“B”。 如果是這樣,那么:
SELECT date,
SUM(amount) FILTER (WHERE type = 'A') as a_sum,
SUM(amount) FILTER (WHERE type = 'B') as b_sum,
SUM(amount) FILTER (WHERE type IN ('A', 'B')) as total
FROM table t
GROUP BY date;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.