Много сте близо с последното запитване. Следното намира един режим:
SELECT value, occurs
FROM (SELECT value,count(*) as occurs
FROM t200
GROUP BY `value`
LIMIT 1
) T1
Мисля, че въпросът ви обаче беше за множество режими:
SELECT value, occurs
FROM (SELECT value, count(*) as occurs
FROM t200
GROUP BY `value`
) T1
WHERE occurs = (select max(occurs)
from (select `value`, count(*) as occurs
from t200
group by `value`
) t
);
РЕДАКТИРАНЕ:
Това е много по-лесно в почти всяка друга база данни. MySQL не поддържа нито with
нито прозорци/аналитични функции.
Вашата заявка (показана по-долу) не прави това, което смятате, че прави:
SELECT value, occurs
FROM (SELECT value, count(*) as occurs
FROM t200
GROUP BY `value`
) T1
HAVING occurs = max(occurs) ;
Окончателното having
клауза се отнася до променливата occurs
но използва max(occurs)
. Поради използването на max(occurs)
това е заявка за агрегиране, която връща един ред, обобщавайки всички редове от подзаявката.
Променливата occurs
не се използва за групиране. И така, каква стойност използва MySQL? Той използва произволен стойност от един от редовете в подзаявката. Тази произволна стойност може да съвпада, а може и да не. Но стойността идва само от един ред. Няма повторение.