SQL面试题:如何求解数量并列最多的问题?

点击上方SQL数据库开发,关注获取SQL视频教程

SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总

问题描述

我们经常会遇到这样的问题,商品销量最多的商品,人流量最多的体育馆等等,他们都有一个共同的特征:就是需要求解出数量,但是会有并列的情况存在。比如有两种商品并列销量最高,有两个体育馆并列人流量最多等等。

具体案例

在表 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的解法留给小伙伴们去尝试一下。

——End——
后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读

这是一个能学到技术的公众号,欢迎关注

点击「阅读原文」了解SQL训练营

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SQL数据库开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值