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

Например:

SELECT MODE(field) FROM table

В каком режиме пользовательскую функцию можно использовать для получения наиболее распространенного значения столбца?

Я знаю, что могу сделать что-то вроде:

SELECT field, COUNT(*) as total FROM table GROUP BY field ORDER BY total DESC LIMIT 1

Но мне нужно запросить и другие данные в том же операторе MySQL, поэтому я должен использовать пользовательскую функцию.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 января 2012

MySQL не поддерживает определяемые пользователем агрегатные функции ( PostgreSQL делает , что и стоит). Вы не можете использовать UDF, чтобы делать то, что вы хотите в MySQL.

Вы можете сделать это, например, поместив вычисление режима в подзапрос производной таблицы:

SELECT t.*
FROM (SELECT field AS mode, COUNT(*) as total FROM table 
      GROUP BY field ORDER BY total DESC LIMIT 1) AS m
JOIN table t ON m.mode = t.field;
0 голосов
/ 03 января 2012

Вот ссылка на документацию MySQL по агрегатным функциям .Похоже, что у них ничего нет для «режима», поэтому я бы сказал, что ваш второй запрос, вероятно, ваш лучший выстрел.

...