1

我有一个名为“订单”的MySQL数据库,其中包含我所有的订单。table在此表中,我有不同的字段,例如:

id
userId  
dateOrder

我想只为执行订单的用户获取按用户分组的所有between 2 and 5订单。

但是我的 SQL 查询不起作用。考虑这些条目:

id  userId dateOrder  
1    138    2013-03-19  
2    138    2013-03-19
3    222    2013-03-19

我想要一个 SQL 请求,它只选择至少完成 2 个订单的用户所下的订单。

对于此示例,SQL 应返回:

userId 138

我尝试了 with GROUP BY, with DISTINCT,但这些都不起作用。你能帮我吗 ?谢谢 !!

4

2 回答 2

2

您应该能够使用HAVING子句来获得结果:

select userid
from orders
group by userid
having COUNT(*) >= 2
    and COUNT(*) <= 5

请参阅带有演示的 SQL Fiddle

如果您想返回每个订单的所有详细信息,可以将查询扩展为:

select o1.id, o1.userid, o1.dateorder
from orders o1
where exists (select userid
              from orders o2
              where o1.userid = o2.userid
              group by userid
              having COUNT(*) >= 2
                  and COUNT(*) <= 5)

请参阅带有演示的 SQL Fiddle

于 2013-03-19T18:27:39.273 回答
1

我认为这应该这样做......

Select * from orders where userid in
(
Select userid from orders
group by userid having count(1) between 2 and 5
)
于 2013-03-19T18:28:35.413 回答