我有一张类似的桌子
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
但是我觉得它太复杂了,有更好的解决方案吗?
答案 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;