MySQL 分组依据案例

MySQL Case with group by

我有一个像这样的 table (name=expense):

id  amount  date
1   -1687   2014-01-02 00:00:00.0
2   11000   2014-01-02 00:00:00.0
3   1500    2014-01-03 00:00:00.0
4   -3800   2014-01-03 00:00:00.0
5   119500  2014-01-01 00:00:00.0
6   -2999   2014-01-04 00:00:00.0
7   5972    2014-01-04 00:00:00.0
..
8   7208    2014-12-31 00:00:00.0

我能够检索 收入 并按月分组,如下所示:

SELECT 
      SUM(amount), 
      date 
 FROM expense 
WHERE YEAR(now()) = YEAR(date) AND amount>0 
GROUP BY MONTH(date);

我能够检索 费用 并按月分组,如下所示:

SELECT
      SUM(amount), 
      date 
 FROM expense 
WHERE YEAR(now()) = YEAR(date) AND amount<=0 
GROUP BY MONTH(date);

我想知道是否有办法合并这两个查询并检索 incomeexpense 并按月分组在 单个查询中 .

是的,您需要一个 Case 语句:

SELECT
   sum(case when amount> 0 then amount end) as income, 
   sum(case when amount<=0 then amount end) as expense, 
   date 
FROM expense 
WHERE YEAR(now()) = YEAR(date) 
GROUP BY MONTH(date);