使用重复数据消除列对groupby的sql查询
我有下表使用重复数据消除列对groupby的sql查询,sql,group-by,unique,Sql,Group By,Unique,我有下表 create table events ( event_id, event_name, datetime, email) 我想在单个查询中显示每周事件,以及通过电子邮件消除重复的每周事件 在这样做时: select date_trunc('week', datetime) wdt, event_name, count(1) from events group by wdt, event_name; wdt | event_name | co
create table events (
event_id,
event_name,
datetime,
email)
我想在单个查询中显示每周事件,以及通过电子邮件消除重复的每周事件
在这样做时:
select date_trunc('week', datetime) wdt, event_name, count(1)
from events
group by wdt, event_name;
wdt | event_name | count
---------------------+-------------+-------
2014-10-27 00:00:00 | deliver | 32
2014-11-17 00:00:00 | open | 30
2014-10-20 00:00:00 | deliver | 25
2014-10-20 00:00:00 | click | 19
2014-10-27 00:00:00 | click | 29
我可以得到第一列,但我不知道如何使
计数列不同
列(如果在同一周内对同一封电子邮件单击两次,则计数为一次,而不是两次)。我认为问题是你只需要做一个不同的1;正如你所指出的
select date_trunc('week', datetime) wdt, event_name, count(distinct 1)
from events
group by wdt, event_name;
但是,由于没有原始数据和一些样本,我不确定如何确认,因为我不明白为什么在wdt中对同一事件名称的同一日期(10/27)进行计数31和29。只需指定只对不同值进行计数的列,如下所示:
select date_trunc('week', datetime) wdt, event_name, count(distinct email)
from events
group by wdt, event_name;
根据您的建议,我在计数列中的所有行都有一个1,数据不再按周/事件名称分组……实际上,为了实现我的目的,我想我必须在我编辑问题的某个地方使用“电子邮件”列,正确的事件计数为32