高级MySQL分组查询

高级MySQL分组查询,mysql,Mysql,我有一家网上商店,订单如下: id purchase_date buyer_name buyer_email product_name delivery_status 1 10.09.2014 jo smith jo@smith.com dildo delivered 2 10.09.2014 jo smith jo@smith.com superdildo delivered 3 11.09.2014 john l

我有一家网上商店,订单如下:

id  purchase_date  buyer_name  buyer_email  product_name  delivery_status
1   10.09.2014     jo smith    jo@smith.com dildo         delivered
2   10.09.2014     jo smith    jo@smith.com superdildo    delivered
3   11.09.2014     john lol    jo@lol.com   cream         delivered
4   13.09.2014     john lol    jo@lol.com   supercream    not delivered
5   15.09.2014     john doe    john@doe.com lingerie      delivered
6   15.09.2014     john doe    john@doe.com lingerie2     not delivered
7   15.09.2014     feels no    ff@trol.com  supercream    delivered
8   18.09.2014     jo smith    jo@smith.com cream         not delivered
我想从此表中选择所有不同的买家电子邮件,其中 当天所有客户订单均已“交付”

我的意思是:

ID 1和2将是匹配项,查询应输出jo@smith.com,因为他当天的两份订单都已交付

ID 3也会匹配,因为所有订单jo@lol.com于当日(2014年9月11日)交付

ID 4在查询中不匹配(并非该名称当天的所有订单都已交付)

ID 5和6也不匹配

ID 7是一个匹配项

ID 8不匹配。

选择不同的买家\u电子邮件
select distinct buyer_email
from your_table
group by buyer_email, purchase_date  
having sum(delivery_status <> 'delivered') = 0
从你的桌子上 按买家电子邮件、购买日期分组 总和(交付状态为“已交付”)=0
选择不同的买家\u电子邮件
从你的桌子上
按买家电子邮件、购买日期分组
总和(交付状态为“已交付”)=0
选择不同的买家\u电子邮件
从你的桌子上
按买家电子邮件、购买日期分组
总和(交付状态为“已交付”)=0
选择不同的买家\u电子邮件
从你的桌子上
按买家电子邮件、购买日期分组
总和(交付状态为“已交付”)=0

您需要一个带有
having
子句的聚合。至少从一开始。以下为已完全交付订单的天数和买家:

select o.purchase_date, o.buyer_email
from orders o
group by o.purchase_date, o.buyer_email
having sum(delivery_status <> 'delivered') = 0;

如果需要整行,可以使用
join

如果需要使用
having
子句进行聚合。至少从一开始。以下为已完全交付订单的天数和买家:

select o.purchase_date, o.buyer_email
from orders o
group by o.purchase_date, o.buyer_email
having sum(delivery_status <> 'delivered') = 0;

如果需要整行,可以使用
join

如果需要使用
having
子句进行聚合。至少从一开始。以下为已完全交付订单的天数和买家:

select o.purchase_date, o.buyer_email
from orders o
group by o.purchase_date, o.buyer_email
having sum(delivery_status <> 'delivered') = 0;

如果需要整行,可以使用
join

如果需要使用
having
子句进行聚合。至少从一开始。以下为已完全交付订单的天数和买家:

select o.purchase_date, o.buyer_email
from orders o
group by o.purchase_date, o.buyer_email
having sum(delivery_status <> 'delivered') = 0;
如果需要整行,可以使用
连接