请告诉我以下命令的错误
mysql> select max(count(*)) from emp1 group by name;
ERROR 1111 (HY000): Invalid use of group function
答案 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;