首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级MySQL分组查询

高级MySQL分组查询
EN

Stack Overflow用户
提问于 2014-11-24 12:38:21
回答 2查看 25关注 0票数 0

我有一家网上商店,有一个订单DB,如下所示:

代码语言:javascript
复制
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当天(11.09.2014)下的所有订单都已交付。

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

ID 5和6也不匹配。

ID 7匹配

ID 8不匹配。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 12:41:51

您需要一个带有having子句的聚合。至少开始吧。以下是已完全交付订单的日期和买家:

代码语言:javascript
复制
select o.purchase_date, o.buyer_email
from orders o
group by o.purchase_date, o.buyer_email
having sum(delivery_status <> 'delivered') = 0;

如果您想要订单ids,最简单的方法是使用group_concat()

代码语言:javascript
复制
select o.purchase_date, o.buyer_email, group_concat(o.id) as ids
from orders o
group by o.purchase_date, o.buyer_email
having sum(delivery_status <> 'delivered') = 0;

如果想要完整的行,可以使用join

票数 1
EN

Stack Overflow用户

发布于 2014-11-24 12:41:00

代码语言:javascript
复制
select distinct buyer_email
from your_table
group by buyer_email, purchase_date  
having sum(delivery_status <> 'delivered') = 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27105074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档