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

  • 本文关键字:postgres 计算 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

我在这里错过了什么?如何将计数的产品放入一行?

时的用例

select email, sum(case when productid=10 then 1 else 0 end) as 
product_10,
sum(case when productid=20 then 1 else 0 end) as product_20 
from mytable 
group by email

如果使用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标准的功能。

最新更新