[英]finding sum of a column with specific values of a column in SQL using group by
我有一个包含以下列的表格:
amount employee
100 a
200 a
300 b
400 b
500 c
我想在同一张表中获得一个 output ,该表基于员工“a”和 rest (a 除外)进行分组,并根据分组给出金额的总和。 期望的结果:
amount employee
300 a
1200 rest
按键group by
使用case
表达式:
select (case when employee = 'a' then employee else 'rest' end) as employee,
sum(amount)
from t
group by (case when employee = 'a' then employee else 'rest' end) ;
这是一个 db<>fiddle。 (这恰好使用 MySQL,但这是标准的 SQL,适用于任何数据库。)
使用 CASE WHEN 转换员工值并将转换后的值分组:
SELECT
CASE WHEN employee = 'a' THEN 'a' ELSE 'rest' END as e,
SUM(amount) as a
FROM
t
GROUP BY
CASE WHEN employee = 'a' THEN 'a' ELSE 'rest' END
你也可以使用 UNION:
SELECT
MAX(emlpoyee) as e,
SUM(amount) as a
FROM
t
WHERE employee = 'a'
UNION ALL
SELECT
'rest' as e,
SUM(amount) as a
FROM
t
WHERE employee <> 'a'
后一种方式可能会占用更多资源,但可能更容易理解和维护,因此您需要判断您是否重视彻底的性能或开发人员的友好性。 (对于每天对 100 名员工运行一次的查询,您可能会争辩说让查询更容易理解会更好。对于每秒访问数万员工的查询,性能应该优先)
请使用以下查询,
select sum(amount), employee from
(select
amount, case when employee = 'a' then employee else 'Rest' end as employee
from table t) t1
group by employee;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.