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

时间:2013-05-08 12:43:15

标签: mysql

请告诉我以下命令的错误

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

8 个答案:

答案 0 :(得分:11)

尝试:

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

答案 1 :(得分:6)

根据提供的代码,我了解您希望选择具有相同名称的最多员工数。

  

您的查询存在的问题是您尝试在单个范围内应用多个级别的聚合。

试试这个:

SELECT MAX(Total) FROM (SELECT COUNT(*) AS Total FROM emp1 GROUP BY name) AS Results

......或者这个:

SELECT COUNT(name) FROM emp1 GROUP BY name ORDER BY COUNT(name) DESC LIMIT 1

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

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

答案 2 :(得分:2)

我要做到以下(假设我理解你想要的东西):

select c from
(
    select count(*) as c, name from emp1 group by name
) tmp
order by c desc limit 1

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

Name
-----------------------
Test
Test
Hello
World
World
World

内部选择会创建一个包含此数据的“表格”

c         Name
----------------------
2         Test
1         Hello
3         World

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

这可以缩短为

select count(*) c from emp1 group by name order by c desc limit 1

答案 3 :(得分:1)

你在问“你的陈述有什么问题”。这是你的陈述:

select max(count(*))
from emp1
group by name;

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

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

select max(cnt)
from (select count(*) as cnt
      from emp1
      group by name
     ) t

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

答案 4 :(得分:0)

您必须选择name进行分组,然后使用max()作为子查询的结果:

select max(count)
from (
  select
    name,
    count(*) as count
  from emp1
  group by name) x

我已经格式化了查询,因此您可以看到正在发生的事情,而不是在显示时将其全部放在一行上。顺便说一句,fnf处的“x”是子查询的必需别名。

答案 5 :(得分:0)

只需在select语句中包含name即可使用group by。

在此处阅读Group By功能... enter link description here

答案 6 :(得分:0)

SELECT  MAX(name_count)
FROM
        (
        SELECT  name
                ,count(*) as name_count
        FROM    emp1 
        GROUP BY
                name
        )

答案 7 :(得分:-2)

 ***Example: 1***
 SELECT *
 FROM customer
 WHERE customer.ID IN
      (SELECT customer_id
         FROM (SELECT customer_id, MAX(cust_count)
                 FROM (SELECT customer_id,
                              COUNT(customer_id)
                                 AS cust_count
                         FROM `order`
                       GROUP BY customer_id) AS cust_count_tbl) AS cust_tbl);


***Example -2*** 

SELECT *
      FROM    customer
   LEFT JOIN
      (SELECT customer_id, COUNT(customer_id) AS cc
         FROM `order`
       GROUP BY customer_id
       ORDER BY cc DESC
        LIMIT 1) AS kk
   ON customer.ID = kk.customer_id
   WHERE kk.customer_id = customer.ID;