问题描述
我们经常会遇到这样的问题,商品销量最多的商品,人流量最多的体育馆等等,他们都有一个共同的特征:就是需要求解出数量,但是会有并列的情况存在。比如有两种商品并列销量最高,有两个体育馆并列人流量最多等等。
具体案例
在表 order 中找到订单数最多客户对应的 customer_id(可能有多个)。表 orders 定义如下:order_id(订单编号),customer_id(客户编号),order_date(下单日期) 有如下几条记录:
输出结果:
解释:因为customer_id为3,4的客户都有2条购买记录,这样求最大值时他们都满足,所以要一起显示出来。
案例分析
像这种求解并列最多的,我们的思路一般是先求出数量中的一条最大值,然后通过子查询,来获取表中不同客户的订单数量,与最大值相等的记录。这样就同时满足了最大值和并列的要求。具体解法如下:
SELECT customer_id FROM Orders GROUP BY customer_id HAVING COUNT (customer_id) = ( --用=来分组筛选出符合最大数量的客户ID SELECT TOP 1 COUNT (customer_id) --TOP 1取出一条最大数量 FROM Orders GROUP BY customer_id ORDER BY COUNT (customer_id) DESC )
以上是SQL Server的解法,MySQL和Oracle的解法留给小伙伴们去尝试一下。