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

时间:2018-09-07 20:46:30

标签: mysql sql group-by

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

我一直在尝试使查询与许多组合一起使用,例如:COUNT(DISTINCT item)或GROUP_CONCAT(DISTINCT order_id),GROUP BY,ORDER BY,HAVING COUNT(DISTINCT item_id)等,但是并没有像我真正需要的那样。对于使我朝正确方向前进的任何帮助,将不胜感激。

在此示例表中,名为item的订单具有1个order_id的人订购了3个项目,order_id为4的人员仅订购了1个项目,order_id为5的人员订购了2个项目,等等。此刻,他们最多只能订购三个项目,但将来可能会添加更多项目,因此需要以可扩展至4个项目,5个项目等的方式编写查询。

表名是:项目

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

2 个答案:

答案 0 :(得分:0)

您必须两次group by

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

答案 1 :(得分:0)

您可以使用两种聚合级别:

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;