首页 > 解决方案 > 根据其他列值减去不同的行值

问题描述

我正在尝试做与这个问题几乎相同的事情,但是在尝试将其更改为我的情况后,我似乎无法产生我的目标。

   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 数组,但是否有“更简单”的解决方法,所以我可以直接从查询中调用数据。

提前致谢。

标签: sqlmariadb

解决方案


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

推荐阅读