MySQL делит столбец на 2 сегмента на основе медианы и находит медиану каждого сегмента?

#mysql #median

#mysql #медиана

Вопрос:

Вот мой пример таблицы под названием t , версия Mysql 5.7:

  ---- ------ 
| id | num  |
 ---- ------ 
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
|  6 |    6 |
|  7 |    7 |
|  8 |    8 |
|  9 |    9 |
 ---- ------ 
  

И теперь я обнаружил, что медиана равна 5, используйте этот sql :

 SELECT
    AVG( tmp.num ) AS median_val 
FROM
    (
SELECT
    num,
    @rownum := @rownum   1 AS `row_number`,
    @total_rows := @rownum 
FROM
    t,
    ( SELECT @rownum := 0 ) r 
WHERE
    num IS NOT NULL 
ORDER BY
    num
    ) AS tmp 
WHERE
tmp.row_number IN ( FLOOR( ( @total_rows   1 ) / 2 ), FLOOR( ( @total_rows   2 ) / 2 ) );
  

Но я хочу разделить столбец num на 2 сегмента на основе медианы.

первый сегмент равен: 1,2,3,4,5; медиана равна: 3

второй сегмент равен: 5,6,7,8,9; медиана равна: 7

Я надеюсь, что выходной результат: 3,5,7

И вот онлайн-таблица t

Моя идея состоит в том, чтобы преобразовать приведенный выше результат sql в @variable, а затем вынести суждение о среднем условии подзапроса, но я думаю, что это не очень умно. Спасибо