Есть ли в MySQL статистическая функция для поиска наиболее популярного значения в столбце? - PullRequest
3 голосов
/ 03 августа 2011

Привет, есть ли статистический метод для поиска наиболее популярных встречающихся значений в столбце таблицы.

Для этой таблицы:

Таблица «ресурсов» - таблица связей для M: M

+------------+---------------------+-----------+
| resource_pk| user_fk             | supply_fk |
+------------+---------------------+-----------+
| 1          | 124124              |     1     |
| 2          | 265235              |     2     |
| 3          | 253255              |     1     |
| 4          | 151255              |     1     |
| 5          | 154233              |     3     |
+------------+---------------------+-----------+

Таким образом, в этом примере наиболее популярным supply_fk было "1".

Я хочу найти наиболее популярное значение столбца "supply_fk" в этой таблице.

Я пробовал это:

Select *
From resource
Group By *
Order By supply_fk Desc
LEFT JOIN
supply
ON
supply.supply_pk = resource.supply_fk

Однако все, что это делает, это дает мне «supply_fk» с наибольшим значением числа, равным «3», которое затем указывает на другую таблицу, дающую мне «медицинские ножницы».

Когда «1» должен быть «скальпелем»

Я предполагаю, что для этого есть статистическая функция MySQL? Я попробовал поискать в Google, но все, что у меня было, это Min, Max и Middle

Спасибо

Ответы [ 6 ]

3 голосов
/ 03 августа 2011

Вы можете группировать, упорядочивать по количеству и получать первую запись:

select r.supply_fk, s.name, count(*)
from resource r
inner join supply s on s.supply_pk = r.supply_fk
group by r.supply_fk, s.name
order by count(*) desc
limit 1
0 голосов
/ 04 августа 2011

ВЫБРАТЬ ФК в качестве ключа, считать (ФК) КАК ИЗ mytable Ключ GROUP BY ЗАКАЗАТЬ КОЛИЧЕСТВО DESC LIMIT 1;

Подробнее об этом здесь: http://forums.devarticles.com/mysql-development-50/mysql-mean-median-mode-statistics-4385.html

0 голосов
/ 03 августа 2011

этот запрос дает вам «самое популярное значение столбца supply_fk в таблице ресурсов»

SELECT supply_fk, COUNT(*) as c FROM resources
   GROUP BY supply_fk ORDER BY c DESC LIMIT 1
0 голосов
/ 03 августа 2011

Попробуйте

ВЫБЕРИТЕ ТОП (1) supply_fk, COUNT (supply_fk) AS supply_fk_count FROM supply GROUP BY supply_fk ORDER BY supply_fk_count desc

0 голосов
/ 03 августа 2011

Вы можете сделать COUNT в MySQL.Смотрите здесь .Попробуйте сделать что-то вроде выбора, где количество является наибольшим.

0 голосов
/ 03 августа 2011

Попробуйте это:

SELECT supply_fk, MAX(c) AS m
FROM (SELECT supply_fk, COUNT(*) AS c
     FROM resource
     GROUP BY supply_fk)
GROUP BY supply_fk

Редактировать: забыл, что нельзя использовать зарезервированные имена для полей. Исправлено сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...