根据另一列将一列聚合到不同字段

时间:2018-08-28 12:31:53

标签: mysql sql aggregate

我有一张类似的桌子

id country   os         sales
1  us        android    100
2  us        ios        50

我想将它们汇总为一条记录

id country android_sales ios_sales
1  us      100           50

我已经简化了这种情况,因此仅基于字符串比较,使用max或min函数可能并不准确。 我有一个类似

的解决方案
select sum((os='android')*sales) as android_sales, 
       sum((os='ios')*sales) as ios_sales 
group by country

但是我觉得它太复杂了,有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

使用条件聚合。 。 。 case内的sum()

select country,
       sum(case when os = 'android' then sales else 0 end) as sales_android,
       sum(case when os = 'ios' then sales else 0 end) as sales_ios
from t
group by country;

您的结果可能不需要id。如果确实要从表中获取ID,请添加min(id)

答案 1 :(得分:0)

您可以进行条件聚合:

select min(id), country, 
       sum(case when os = 'android' then sales else 0 end) as android_sales,
       sum(case when os = 'ios' then sales else 0 end) as ios_sales
from table t
group by country;