[英]SUM multiple columns by different condition from same table and then group by date
我尝试对多列(CASH+CARD+CHEQUE+REST)的值求和并将它们分组以显示每天的总数。
实际表:
日期 | 现金 | 卡片 | 查看 | REST | 类型 |
---|---|---|---|---|---|
2022-06-02 | 150.00 | 200.00 | 0.00 | 12.00 | 商店1 |
2022-06-02 | 150.00 | 240.00 | 56.00 | 67.00 | 商店2 |
2022-06-02 | 45.00 | 459.00 | 150.00 | 0.00 | 商店3 |
2022-06-02 | 45.00 | 400.00 | 150.00 | 34.00 | 旅游1 |
2022-06-03 | 87.00 | 59.00 | 150.00 | 400.00 | 商店1 |
2022-06-03 | 45.00 | 790.00 | 450.00 | 104.00 | 商店2 |
2022-06-03 | 70.00 | 30.00 | 0.00 | 241.00 | 商店3 |
2022-06-03 | 30.00 | 120.00 | 11.00 | 72.00 | 旅游1 |
我希望它成为新表:
日期 | TOTAL_SALE | STORE_TOTAL | TRAVEL_TOTAL |
---|---|---|---|
2022-06-02 | 2158.00 | 1529.00 | 629.00 |
2022-06-03 | 2659.00 | 2426.00 | 233.00 |
我尝试使用 UNION 但将结果放在另一个之下而不是像这样在同一行中,我也尝试了下面的选项但收到此错误
#1111 无效使用组 function
我使用的代码会产生错误:
SELECT DATE, (SUM(CASH) + SUM(CARD) + SUM(CHEQUE) + SUM(REST)) AS TOTAL_SALE,
SUM(case when TYPE LIKE 'STORE%' then (SUM(CASH) + SUM(CARD) + SUM(CHEQUE) + SUM(REST))
else 0 end) as STORE_TOTAL,
SUM(case when TYPE LIKE 'TRAVEL%' then (SUM(CASH) + SUM(CARD) + SUM(CHEQUE) + SUM(REST))
else 0 end) as TRAVEL_TOTAL
FROM tbl_Payment where DATE BETWEEN '2022-06-02' AND '2022-06-03'
GROUP BY DATE ASC
首先, group by
不接受订单。 没有asc
。
问题是将sum
放入sum
中。 sum
中的任何内容都将按行求和,无需再次求和。
同样,您不必对每一列求和,然后再相加。 添加列然后求和。 这更简洁一些。
SELECT
"DATE",
SUM(CASH + CARD + CHEQUE + REST) AS TOTAL_SALE,
SUM(
case when TYPE LIKE 'STORE%' then
CASH + CARD + CHEQUE + REST
else
0
end
) as STORE_TOTAL,
SUM(
case when TYPE LIKE 'TRAVEL%' then
CASH + CARD + CHEQUE + REST
else
0
end
) as TRAVEL_TOTAL
FROM tbl_Payment
where "DATE" BETWEEN '2022-06-02' AND '2022-06-03'
GROUP BY "DATE"
注意: date
是 SQL 关键字。 它可能与类型date
混淆。 避免将其用作列名。 使用at
和on
约定命名时间戳和日期列。 例如, paid_on
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.