Создайте пользовательскую функцию, которая работает с GROUP BY в mysql - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь создать агрегированную функцию MEDIAN () в MySQL, такую ​​как MIN (), MAX (), AVG (), которая принимает на вход имя столбца или строку, в которой есть объединенные значения нужного столбца.

У меня проблемы с пониманием ограничений пользовательских функций MySQL, и было бы очень полезно, если бы некоторые могли помочь мне узнать, как это делается.

Пример:

MySQLтаблица имеет 2 столбца (ID, номер)

+----+-----+
| id | num |
+----+-----+
|  1 |   5 |
|  1 |   6 |
|  1 |   7 |
|  2 |   1 |
|  2 |   3 |
|  2 |   5 |
+----+-----+
SELECT id, MEDIAN(num) as median
FROM table
GROUP BY id;

ИЛИ

SELECT id, MEDIAN(GROUP_CONCAT(num SEPARATOR ',') as median
FROM table
GROUP BY id;

Ожидаемый результат:

+----+--------+
| id | median |
+----+--------+
|  1 |      6 |
|  2 |      3 |
+----+--------+

1 Ответ

0 голосов
/ 11 декабря 2018

Определяемые пользователем агрегатные хранимые функции , добавленные в MariaDB-10.3.3

MySQL может выполнять агрегатные функции, но не в SQL.Им нужен [UDF (реализация совместно используемой библиотеки)] (https://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html}

...