Пожалуйста, дайте мне знать, что случилось с командой нижеКак найти максимальное количество с помощью mysql?
mysql> select max(count(*)) from emp1 group by name;
ERROR 1111 (HY000): Invalid use of group function
Пожалуйста, дайте мне знать, что случилось с командой нижеКак найти максимальное количество с помощью mysql?
mysql> select max(count(*)) from emp1 group by name;
ERROR 1111 (HY000): Invalid use of group function
Try:
SELECT NAME, COUNT(*) as c FROM table GROUP BY name ORDER BY c DESC LIMIT 1
я на следующее (предполагая, что я правильно понимаю, что вы хотите):
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
Очевидно, что внешний запрос здесь не требуется. ORDER BY COUNT (*) DESC LIMIT 1 будет делать то же самое – Strawberry
Вы должны выбрать name
группировать ею, а затем использовать max()
на результат, что в качестве подзапроса:
select max(count)
from (
select
name,
count(*) as count
from emp1
group by name) x
Я отформатированный запрос таким образом, вы можете видеть, что происходит, вместо того, чтобы помещать все это на одной линии, когда вы это показывали. Btw «x» в нем fnf является обязательным псевдонимом для подзапроса.
Просто введите имя в свой оператор select, чтобы использовать группу.
Читайте о Группировать функции здесь ... enter link description here
SELECT MAX(name_count)
FROM
(
SELECT name
,count(*) as name_count
FROM emp1
GROUP BY
name
)
Есть ли способ также выбрать имя в самой внешней инструкции SELECT? Итак, если вы хотите узнать, какая группа имен была с MAX (name_count)? – Logan
Вы спрашиваете «что случилось с вашим утверждением». Это ваше заявление:
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
, которое может быть немного более эффективным.
***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;
Из прилагаемого кода Я понимаю, что вы хотите выбрать максимальное число сотрудников, имеющих одно и то же имя.
Проблема с вашим запросом заключается в том, что вы пытаетесь применить более одного уровня агрегации в одной области.
Попробуйте это:
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
Оба запроса возвращают одинаковый результат, но их реализации различны.
Используйте тот, который вам больше всего подходит, или в зависимости от того, что вы предпочитаете.
Если мы не особенно педантичны, я думаю, что это дает ответ - хотя порядок по лимиту будет более обычным – Strawberry
Я полагаю, что в таблице есть несколько строк, в которых «имя» имеет одинаковое значение. Он хочет найти «имя» с наибольшим количеством строк. –
Вы пытаетесь считать «имя», а затем возвращать только самый высокий счет? – SOfanatic
Вы не можете агрегировать совокупность в пределах той же области – Strawberry