生のカウントを取得するには
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):テーブルを1回スキャンし、カウントを作成します(T1)
- O(n):派生テーブルT1をスキャンし、変数@r(T2)で最大カウントを維持します
- O(n):派生テーブルT2をスキャンし、カウントが最も高い高さのみをフィルタリングします