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

您所在的位置:网站首页 数据库计数函数怎么写的 sql MAX() with COUNT() 直接求COUNT(*)的最大值

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

2024-07-01 11:58| 来源: 网络整理| 查看: 265

这篇文章将介绍一个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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3