MySQL запрос, чтобы получить модальные средние значения столбца? - PullRequest
0 голосов
/ 06 апреля 2011

Я записываю высоту окна пользователей моей панели управления.

У меня есть такая таблица:

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

У меня есть тысячи строк, и я хотел бы получитьМодальные средние.

то есть 1200px = 300 пользователей, 1100px = 125 пользователей, 500px = 12 пользователей

Я ищу запрос MySQL, который я могу просто вставить в PhpMyAdmin ....

1 Ответ

1 голос
/ 06 апреля 2011

Чтобы получить необработанный счет

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 и выполнить фильтрацию только по высотам с наибольшим числом
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...