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

简介: SQL数据库开发

问题描述

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

具体案例

在表 order 中找到订单数最多客户对应的 customer_id(可能有多个)。表 orders 定义如下:order_id(订单编号),customer_id(客户编号),order_date(下单日期) 有如下几条记录:

30.jpg

输出结果:

31.jpg

解释:因为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的解法留给小伙伴们去尝试一下。

相关文章
|
4天前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
76 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
4天前
|
SQL 存储 数据库
面试题19: 如何优化SQL查询?
面试题19: 如何优化SQL查询?
面试题19: 如何优化SQL查询?
|
4天前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
240 0
|
4天前
|
SQL 关系型数据库 MySQL
SQL常见面试题总结2
SQL常见面试题总结
64 2
|
4天前
|
SQL 关系型数据库 MySQL
MySQL SQL语句面试准备
MySQL SQL语句面试准备
14 0
|
4天前
|
SQL 关系型数据库 MySQL
|
4天前
|
SQL 关系型数据库 MySQL
慢SQL(面试题)
慢SQL(面试题)
35 1
|
4天前
|
SQL
面试必备杀技:SQL查询专项训练(二)
面试必备杀技:SQL查询专项训练
|
4天前
|
SQL
面试必备杀技:SQL查询专项训练(一)
面试必备杀技:SQL查询专项训练
|
4天前
|
SQL 数据库
面试题:Sql中的连接
面试题:Sql中的连接
30 5