簡體   English   中英

SQL:根據另一列將一列匯總為多列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM