Om ruwe tellingen te krijgen
select window_height, count(*) totalusers
from tbl
group by window_height
order by totalusers desc # or by window_height
Om het modale gemiddelde te krijgen (dit toont meerdere waarden als er banden zijn voor het hoogste aantal)
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
Dit gebruikt een MySQL-truc om een variabele te gebruiken om het maximale aantal op te slaan terwijl het door de geaggregeerde subquery gaat. Samenvatting van de operaties
- O(n):scan de tabel één keer en bouw de tellingen op (T1)
- O(n):scan de afgeleide tabel T1 en bewaar de hoogste telling in de variabele @r (T2)
- O(n):scan de afgeleide tabel T2 en filter alleen op de hoogten met het hoogste aantal