За да получите необработени бройки
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 и филтрирайте само за височините с най-голям брой.