计算postgres中某个值的出现次数

时间:2018-11-28 20:47:07

标签: sql postgresql

我有一张看起来像这样的桌子

     email           product_id
nen@something.com        20
nen@something.com        10
nen@something.com        20
nen@something.com        20
nen@something.com        10

我想创建一个表格视图来统计购买产品(每封电子邮件)的次数并将其显示在一行中。

     email               product_10       product_20
nen@something.com            2                 3

我尝试使用以下sql来执行此操作,但是它不起作用。

select email,count(product_id) from mytable group by email,product_id;

它给了我一张看起来像这样的桌子。

     email           count(product_id)
nen@something.com            2
nen@something.com            3

我在这里想念什么?如何将计数的产品放入一行?

2 个答案:

答案 0 :(得分:1)

用例何时

return

答案 1 :(得分:1)

如果使用的是Postgres,则可以使用filter子句。更优雅,通常快一点:

select email,
       count(*) filter (where productid = 10) as product_10,
       count(*) filter (where productid = 20) as product_20
from t 
group by email;

这是ANSI / ISO标准功能。