Aby uzyskać surowe obliczenia
select window_height, count(*) totalusers
from tbl
group by window_height
order by totalusers desc # or by window_height
Aby uzyskać średnią modalną (pokaże wiele wartości, jeśli istnieją remisy dla największej liczby)
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
Wykorzystuje to sztuczkę MySQL polegającą na użyciu zmiennej do przechowywania maksymalnej liczby podczas przechodzenia przez zagregowane podzapytanie. Podsumowanie operacji
- O(n):przeskanuj tabelę raz i zbuduj zliczenia (T1)
- O(n):przeskanuj wyprowadzoną tabelę T1 i zachowaj najwyższą liczbę w zmiennej @r (T2)
- O(n):skanuj pochodną tabelę T2 i filtruj tylko dla wysokości o największej liczbie