我有一个看起来像的表
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标准的功能。