如何使用mysql查找最大计数?

use*_*190 9 mysql

请让我知道下面的命令有什么问题

mysql> select max(count(*)) from emp1 group by name;
ERROR 1111 (HY000): Invalid use of group function
Run Code Online (Sandbox Code Playgroud)

mat*_*sko 14

尝试:

SELECT NAME, COUNT(*) as c FROM table GROUP BY name ORDER BY c DESC LIMIT 1


Kni*_*ins 8

从提供的代码中我了解到您希望选择具有相同名称的最多员工数.

您的查询的问题在于您尝试在单个范围中应用多个聚合级别.

试试这个:

SELECT MAX(Total) FROM (SELECT COUNT(*) AS Total FROM emp1 GROUP BY name) AS Results
Run Code Online (Sandbox Code Playgroud)

...或这个:

SELECT COUNT(name) FROM emp1 GROUP BY name ORDER BY COUNT(name) DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

两个查询都返回相同的结果,但它们的实现是不同的.

使用最适合您或您喜欢的任何一种.


Gor*_*off 6

你问的是“你的陈述有什么问题”。这是您的声明:

select max(count(*))
from emp1
group by name;
Run Code Online (Sandbox Code Playgroud)

明白你的意思。但 SQL 编译器则不然。原因很简单。一个给定select只能有一个group by子句。您的查询要求其中两个。首先是group by名字。第二个是所有这些结果的汇总。

编写查询的正确方法(正如您所希望的那样)是使用子查询:

select max(cnt)
from (select count(*) as cnt
      from emp1
      group by name
     ) t
Run Code Online (Sandbox Code Playgroud)

这是一个完全合理的解决方案,仅使用标准 SQL。其他答案已经提出了使用该子句的解决方案limit,这可能会更有效一些。


Tho*_*mar 5

我将执行以下操作(假设我正确理解您想要的内容):

select c from
(
    select count(*) as c, name from emp1 group by name
) tmp
order by c desc limit 1
Run Code Online (Sandbox Code Playgroud)

这将按名称从所有计数中选择最大的计数。例如,如果您的表包含

Name
-----------------------
Test
Test
Hello
World
World
World
Run Code Online (Sandbox Code Playgroud)

内部选择将使用此数据创建一个“表”

c         Name
----------------------
2         Test
1         Hello
3         World
Run Code Online (Sandbox Code Playgroud)

外部选择将按c降序排列并选择第一个条目,即3.

这可以缩短为

select count(*) c from emp1 group by name order by c desc limit 1
Run Code Online (Sandbox Code Playgroud)