У меня есть структура таблицы, например:
id | ex_name | att_name
10 | David | sam G&G
12 | John | mark hol
13 | John | john b
14 | Mark | john c
15 | David | mark hol
16 | David | mark hol
17 | Mark | sam G&G
18 | John | john b
19 | David | sam G&G
20 | John | sam G&G
Когда я использую следующий запрос:
SELECT att_name
, count(att_name) as att_count
FROM `tablename`
group
by att_name
order
by att_count desc
Возвращает:
sam G&G = 4
mark hol = 3
john b = 2
john c = 1
Мне нужны максимальные значения вывода, т.е. Сэм G&G, которому 4 года
То же самое со столбцом ex_name, которое он возвращает:
David = 4
john = 4
mark = 2
Я хочу, чтобы верхние значения столбца ex_name, которые являются Дэвидом и Джоном, имели счет 4
Что я хочу получить в конечном итоге:
ex_name | att_name | ex_count | att_count
David Sam G&G 4 4
John 4
Я также попытался выполнить запрос ниже для получения вывода, но в этом случае я получаю ex_name, а att_name имеет значение NULL.
SELECT a.att_name,b.att_name,max(a.ex_count),max(b.att_count)
FROM application_data
INNER JOIN (
SELECT ex_name,count(ex_name) as ex_count
FROM application_data
GROUP BY ex_name
) a
INNER JOIN (
SELECT att_name ,count(att_name) as att_count
FROM application_data
GROUP BY att_count
) b
Он возвращает:
ex_name | att_name | ex_count | att_count
NULL NULL 4 4
Вы можете мне помочь? Заранее спасибо
Запрос предполагает, что в данных есть att_count, в данных примера его нет. Предполагая, что вы забыли разместить данные здесь, запрос не должен даже выполняться, потому что это не ANSI SQL, вы не можете смешивать неагрегированные столбцы ) со столбцом (столбцами) агрегирования в предложении SELECT без использования GROUP BY, см. демо
@RaymondNijland, во втором запросе я упомянул count(att_name) как att_count.






Похоже, вы хотите агрегировать таблицу по некоторому столбцу, а затем сохранить все групповые записи, которые имеют наибольшее количество. Один из способов сделать это — добавить в текущий запрос предложение HAVING, в котором утверждается, что количество сохраняемых групп — это наибольшее количество из всех групп.
SELECT att_name, COUNT(*) AS cnt
FROM tablename
GROUP BY att_name
HAVING COUNT(*) = (SELECT COUNT(*) FROM tablename
GROUP BY att_name ORDER BY COUNT(*) DESC LIMIT 1);
Вы также можете сообщить нам, какую версию MySQL вы используете, например, если вы используете MySQL 8+, могут быть некоторые новые методы решения вашей проблемы.