MYSQL: Group By 和 SUM 具有不同条件的不同列

MYSQL: Group By and SUM different columns with different criteria

我正在尝试使用 GROUP BY 查询 MySQL table,然后根据不同的条件(类型)对列求和。

这是一个table:

NAME       TYPE      AMOUNT

Walter     BUY       2
Walter     BUY       5
Walter     SELL      3
Walter     SELL      1
Pollo      BUY       8 
Pollo      BUY       2 
Jessie     BUY       1
Jessie     BUY       3
Jessie     SELL      2
Jessie     SELL      1

我想按名称分组并对每个名称的买入和卖出求和。我要找的结果:

Name       SUM(BUY)    SUM(SELL)

Jessie     4           3
Pollo      10          0
Walter     7           4

我能够获得 SUM,但只能在两个不同的查询中获得:

 SELECT name, SUM(BUY) FROM tb WHERE TYPE = "BUY" GROUP BY NAME;

 SELECT name, SUM(SELL) FROM tb WHERE TYPE = "SELL" GROUP BY NAME;

我正在尝试 UNION 和 UNION 所有这些查询,但它不起作用:

 (SELECT name, SUM(BUY) FROM tb WHERE TYPE = "BUY" GROUP BY NAME)
 UNION
 (SELECT name, SUM(SELL) FROM tb WHERE TYPE = "SELL" GROUP BY NAME);

是否可以对具有不同 WHERE 条件的不同列进行 GROUP BY 然后 SUM?

我们可以尝试使用条件聚合函数

根据您的逻辑使用 SUMCASE WHEN 表达式。

SELECT name, 
     SUM(CASE WHEN TYPE = 'buy' THEN AMOUNT ELSE 0 END) 'SUM(BUY)',
     SUM(CASE WHEN TYPE = 'Sell' THEN AMOUNT ELSE 0 END) 'SUM(Sell)'
FROM tb  
WHERE TYPE IN ('buy','Sell')
GROUP BY NAME;

sqfliddle