2017-10-11 44 views
-3

基于下面的表结构,我想对每个列的值只计算一次值。如何在SQL中对此进行聚合

Person ID Email Template Email Event 
1   A    DELIVER 
1   A    OPEN 
1   A    OPEN 
1   B    CLICK 
2   A    DELIVER 
2   A    OPEN 
3   A    DELIVER 
3   C    DELIVER 

我想要得到的电子邮件数量,发送,点击并打开每个人。我期望为每个人获取这个数字不一定是模板。所有的电子邮件模板只发送给一个人,但他们可以打开并多次点击该模板。我想不包括重复打开并点击此聚合。

+0

当你离开表格结构而不是图片时,可以将其格式化为更具可读性。你有尝试过什么吗?是SQL Server,PostgreSQL还是MySQL? – Moseleyi

+0

欢迎来到SO。请花一些时间阅读[问]。不要发布链接到数据图像。请编辑该问题。另外,你有什么尝试? – OldProgrammer

+0

在提出问题之前,请学习如何提问。 https://stackoverflow.com/help/how-to-ask – Eric

回答

2

这样的事情?我不知道你的桌子叫做什么

select t.person_id, 
sum(case when t.email_event_type = 'DELIVER' then 1 else 0) deliver_count, 
sum(case when t.email_event_type = 'OPEN' then 1 else 0) open_count, 
sum(case when t.email_event_type = 'CLICK' then 1 else 0) click_count 
from <your_table_name> t 
group by t.person_id