Чтобы получить необработанный счет
select window_height, count(*) totalusers
from tbl
group by window_height
order by totalusers desc # or by window_height
Чтобы получить модальное среднее значение (будет показано несколько значений, если есть связи для наибольшего числа)
select window_height, totalusers
from (
select @r := if(totalusers>@r,totalusers,@r) maxcount, window_height, totalusers
from (select @r:=0) initvars, (
select window_height, count(*) totalusers
from tbl
group by window_height
) X ) Y
where totalusers = @r
Используется трюк MySQLиспользования переменной для хранения максимального количества при прохождении агрегированного подзапроса.Сводка операций
- O (n): отсканировать таблицу один раз и построить счетчики (T1)
- O (n): отсканировать производную таблицу T1 и сохранить самый высокий счет впеременная @r (T2)
- O (n): отсканировать производную таблицу T2 и выполнить фильтрацию только по высотам с наибольшим числом