单个MySQL select语句中的“distinct count”和“distinct count if existing”
我有一个我已经发送的电子邮件表,以及我发送电子邮件的日期单个MySQL select语句中的“distinct count”和“distinct count if existing”,mysql,sql,Mysql,Sql,我有一个我已经发送的电子邮件表,以及我发送电子邮件的日期 ----------------------------- | email | date_sent | ----------------------------- | a@a.com | 2013-01-10 | | a@a.com | 2013-01-10 | | a@a.com | 2013-01-10 | | b@b.com | 2013-01-10 | | a@a.com
-----------------------------
| email | date_sent |
-----------------------------
| a@a.com | 2013-01-10 |
| a@a.com | 2013-01-10 |
| a@a.com | 2013-01-10 |
| b@b.com | 2013-01-10 |
| a@a.com | 2013-01-11 |
| c@c.com | 2013-01-11 |
-----------------------------
对于给定的日期,我需要获得发送的电子邮件总数、今天的唯一地址以及以前未出现的唯一地址
第一部分很简单:
SELECT count(email) emails_sent, count(distinct email) unique_users
from sent_emails where date_sent = '2013-01-10';
我很难收到以前没有出现过的电子邮件。可能吗
我尝试了许多不同的方法,但几乎没有成功。e、 g:
SELECT count(email) emails_sent, count(distinct email) unique_users,
sum( (select count(email) from sent_emails se
where se.date_sent < date_sent
and se.email = email)) new_emailed_users
from sent_emails where date_sent = '2013-01-10';
这就是我对2013-01-11的预期结果:
--------------------------------------------------
| emails_sent | unique_users | new_emailed_users |
--------------------------------------------------
| 2 | 2 | 1 |
--------------------------------------------------
感谢您在没有子查询的情况下提供的帮助,提高了速度
select
count(if(date_sent='2013-01-10',email, null)) as emails,
count(distinct if(date_sent='2013-01-10',email, null)) as uniques,
count(distinct email) as total_unique_email
from sent_emails
这是我的解决办法。不确定它是最有效的:
SELECT count(email) emails_sent, count(distinct email) unique_users,
count(distinct if(not exists(select 1 from sent_emails where date_sent < se.date_sent and se.email = email ),email,null)) new_emailed_users
from sent_emails se where date_sent = '2013-01-10';
SELECT count(email) emails_sent, count(distinct email) unique_users,
count(distinct if(not exists(select 1 from sent_emails where date_sent < se.date_sent and se.email = email ),email,null)) new_emailed_users
from sent_emails se where date_sent = '2013-01-10';