在MySQL中查找与每个订单大小相关的订单数量

在MySQL中查找与每个订单大小相关的订单数量,mysql,sql,group-by,Mysql,Sql,Group By,需要一些关于MySQL查询的帮助,以便在更大的数据库中使用。在这里简化,我需要找到与每个订单大小相关的订单数量 我一直在尝试让查询与很多组合一起工作,比如:COUNT(DISTINCT item)或GROUP_CONCAT(DISTINCT order_id)、GROUP by、order by、HAVING COUNT(DISTINCT item_id)等等。但结果并不是我真正需要它。如果能帮助我朝着正确的方向前进,我将不胜感激 在这个名为items的示例表中,order_id为1的人订购了三

需要一些关于MySQL查询的帮助,以便在更大的数据库中使用。在这里简化,我需要找到与每个订单大小相关的订单数量

我一直在尝试让查询与很多组合一起工作,比如:COUNT(DISTINCT item)或GROUP_CONCAT(DISTINCT order_id)、GROUP by、order by、HAVING COUNT(DISTINCT item_id)等等。但结果并不是我真正需要它。如果能帮助我朝着正确的方向前进,我将不胜感激

在这个名为items的示例表中,order_id为1的人订购了三件物品,order_id为4的人只订购了一件物品,order_id为5的人订购了两件物品,等等。目前,他们最多只能订购三件物品,但在未来,可以添加更多项,因此需要以可扩展为4项、5项等的方式编写查询

表名为:items

item_id    order_id    item
-------------------------------
1          1           apple
2          1           orange
3          1           grape
4          2           grape
5          3           apple
6          3           orange
7          4           apple
8          5           orange
9          5           apple
10         6           apple
11         6           orange
12         6           grape
13         7           orange
14         8           grape
在本例中,查询结果将是:

Number_of_Orders        Total_Order_Size
----------------------------------------
4                       1
2                       2
2                       3

您必须按
分组两次

select item_count,count(*)
from (select order_id,count(*) as item_count
      from tbl 
      group by order_id
     ) t
group by item_count

您可以使用两个级别的聚合:

select num_items, count(*) as num_orders
from (select order_id, count(*) as num_items
      from t
      group by order_id
     ) o
group by num_items
order by num_items;

哇,太快了。很好用!谢谢