使用重复数据消除列对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