MySQL查询获取列的模态平均值?

时间:2011-04-06 09:21:22

标签: mysql phpmyadmin

我一直在记录控制面板用户的窗口高度。

我有一张这样的表:

user_id(INT) | window_height(INT)
--------------------------------
123          | 1200
124          | 1200
125          | 1100
126          | 1200

我有数千行,想获得Modal平均值。

  

即1200px = 300个用户,1100px =   125users,500px = 12users

我正在寻找一个MySQL查询,我可以直接进入PhpMyAdmin ....

1 个答案:

答案 0 :(得分:1)

获得原始计数

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并仅过滤具有最高计数的高度