Мое решение, представленное ниже, работает только в одном запросе без создания таблицы, переменной или даже подзапроса. Кроме того, он позволяет вам получать медианную для каждой группы запросы по группам (это то, что мне нужно!):
SELECT `columnA`,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(`columnB` ORDER BY `columnB`), ',', CEILING((COUNT(`columnB`)/2))), ',', -1) medianOfColumnB
FROM `tableC`
-- some where clause if you want
GROUP BY `columnA`;
Это работает из-за умного использования group_concat и substring_index.
Но, чтобы разрешить большую группу group_concat, вы должны установить для group_concat_max_len более высокое значение (по умолчанию 1024 символа). Вы можете установить его так (для текущего сеанса sql):
SET SESSION group_concat_max_len = 10000;
-- up to 4294967295 in 32-bits platform.
Дополнительная информация для group_concat_max_len: https://dev.mysql.com/doc/refman/5.1/en/server -системы-variables.html # sysvar_group_concat_max_len