Вы не сказали нам, каковы ваши критерии для принятия решения о том, следует ли агрегировать конкретную строку как «прочее», чтобы вы не получили однозначного ответа.
Существует 2 вероятныхСценарии, которые я могу себе представить - вы хотите разложить в зависимости от размера значения или его частоты.Если вы можете определить запрос, который возвращает ЛИБО данные, которые вы хотите сгруппировать, как «другие» ИЛИ данные, которые вы хотите перечислить по отдельности, то присоедините его обратно к исходному набору данных .....
SELECT version, COUNT(*)
FROM myTable
GROUP BY version
ORDER BY COUNT(*) DESC
LIMIT 0,3
даст вамсамые популярные 3 версии, OTOH ...
SELECT version
FROM myTable
ORDER BY version DESC
LIMIT 0,3
даст вам самую последнюю версию (хотя вы столкнетесь с проблемами, так как нет простого способа , который я знаю, с которым можно справитьсямногозначный номер версии в MySQL - рассмотрите версию 3.0.9 против 3.0.200)
, следовательно ...
SELECT IFNULL(ilv.version, "other"), COUNT(*)
FROM myTable m
LEFT JOIN (
SELECT version, COUNT(*)
FROM myTable
ORDER BY COUNT(*) DESC
LIMIT 0,3
) ilv
ON m.version=ilv.version
GROUP BY IFNULL(ilv.version, "other")
Есть несколько значительно более эффективных способов получитьрезультат (для вышеприведенного требуется 2 полных прохода через данные), но использование подхода LEFT JOIN / подзапрос упрощает задачу переопределения «другой» классификации.