sql查询基于where子句的列名

时间:2017-05-16 14:37:07

标签: sql postgresql

我试图从1个表中运行sql查询,我希望每个结果列中的数据基于不同的where子句。

示例:

我有一个名为messages的表,其中包含名为type,size,country

的列

类型的值包括电子邮件和短信。

大小的值是整数。

我想创建一个包含3列的视图:country,sms,email。然后,我想显示每个国家/地区的电子邮件和短信大小的总和。

我认为我需要列标题的where子句,但我无法弄清楚如何执行此操作。

我尝试做类似的事情:

select country, sum(size) 
where type = 'sms' as "SMS", sum(size) 
where type = 'email' as "Email"
from messages table
group by country

我希望我想要完成的事情的逻辑是清楚的。我无法弄清楚语法。有人可以帮忙吗?谢谢!

注意:db是postgressql。

1 个答案:

答案 0 :(得分:3)

您可以使用case表达式的条件聚合,如下所示:

select 
    country
  , sum(case when type='email' then size else 0 end) as email
  , sum(case when type='sms' then size else 0 end) as sms
from messages
group by country