sql MAX() with COUNT() 直接求COUNT(*)的最大值

这篇文章将介绍一个sql的实用技巧,就是max函数和count函数的复合使用,来直接求得COUNT(*)的最大值。这个技巧在很多场合都会需要使用,而我自己探索发现这个技巧的契机则是我的sql课程的某一道练习题,那么就让我们从我解决这道练习题的思路过程来顺着理解吧。

首先我们有一个关于电影的数据库,其中有个表名为people记录了电影人的信息,我们的问题是在这个表中找到suename列里出现次数最多的surname进行计数。

The most common surname in the database can be found how many times?”

也就是说我们需要计数(count函数)和取最大值(max函数)两种操作,即对不同的surname计数,并在计数中取到最大值。

最开始我直接MAX(COUNT(*))但是这样子的写法显然是不对的,代码会报错:

misuse of aggregate function COUNT(): SELECT surname,
COUNT(surname) FROM people
GROUP BY surname
HAVING COUNT(*) = MAX(COUNT(*));

我于是开始想能不能按顺序排列一下,也就是用到ORDER BY。事实上这样子的确能够解答问题,代码如下:

SELECT surname,
COUNT(surname) FROM people 
GROUP BY surname 
ORDER BY COUNT(surname) DESC;

“the most common surname”的确被找到并且计数了,但是却是从一列降序排列的数据中的出得结论,而不是直接得到的答案,总令人产生一种取巧的感觉,而且觉得并不是很好的直接解决问题。我想能不能直接得到COUNT(*)的最大值呢?答案当然也是可以的,那就是max和count函数的复合使用。

MAX函数无法直接查询COUNT(*),但是可以建立inner query,再从中查询,具体流程可由下图直观的呈现

具体代码如下:

SELECT MAX (mycount) 
FROM (SELECT agent_code,COUNT(agent_code) mycount 
FROM orders 
GROUP BY agent_code);

应用到本题中的话就是:

SELECT surname, COUNT(surname) 
FROM people  GROUP BY surname 
HAVING COUNT (surname)=( 
SELECT MAX(mycount) 
FROM ( 
SELECT surname, COUNT(surname) mycount 
FROM people 
GROUP BY surname));

这样就完美解决问题啦,只有一条数据显示“the most common surname”,而不是某个降序表来自己看出来~

reference:

http://www.w3school.com.cn/sql/sql_func_max.asp

http://www.w3school.com.cn/sql/sql_func_count.asp

https://www.w3resource.com/sql/aggregate-functions/max-count.php

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值