根据其他列值减去不同的行值

时间:2020-02-02 08:26:47

标签: sql mariadb

我正在尝试与此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数组,但是有一种“更轻松的”解决方法,因此我可以直接从查询中调用数据。

谢谢。

2 个答案:

答案 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之前的总和。

Demo