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?
我们可以尝试使用条件聚合函数
根据您的逻辑使用 SUM
和 CASE 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;
我正在尝试使用 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?
我们可以尝试使用条件聚合函数
根据您的逻辑使用 SUM
和 CASE 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;