我正在尝试与此question做相同的事情,但在尝试将其更改为我的情况后,似乎无法达成目标。
id, type, time, amount
------------
18, depo, 2020-02-02 10:13:00, 30
17, full, 2020-02-02 10:12:00, 100
16, full, 2020-02-01 15:12:00, 100
15, full, 2020-02-01 13:12:00, 100
我需要做的是按日期对所有组进行SUM()运算,
SELECT sum(amount) amount, DATE(time) day
FROM `payment`
GROUP BY DATE(time), type
ORDER BY day, type DESC
它返回两个相同的日期
70, 2020-02-02
100, 2020-02-02
200, 2020-02-01
我需要的操作是(-)depo的全减,所以在2020-02-02我将得到70。与其他日期相同。我正在考虑将所有数据分配给PHP数组,但是有一种“更轻松的”解决方法,因此我可以直接从查询中调用数据。
谢谢。
答案 0 :(得分:1)
您可以在聚合中使用条件(case..when
子句):
SELECT sum(case when type = 'depo' then - amount else amount end) amount, DATE(time) day
FROM `payment`
GROUP BY DATE(time), type
ORDER BY day, type DESC
答案 1 :(得分:0)
由于group by子句,您将获得两行:group by type
:depo的一行,而full的一行,如果您需要汇总的唯一行是where type in ('full', 'depo')
行,那么,您可以按日期分组(我的答案基于@Barbaros-Özhan答案)
SELECT sum(case when type = 'depo' then - amount else amount end) amount, DATE(time) day
FROM `payment`
WHERE type IN ('full', 'depo')
GROUP BY day
ORDER BY day
我还删除了ORDER BY类型,因为您说的是您需要的是DATE之前的总和。