MySQL根据中位数将一列分为2个分段,然后找到每个分段的中位数?

问题描述

这是我的示例表tMysqL版本是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;中位数是:5

第二段是:5,6,7,8,9;中位数是:7

我希望输出结果: 3,5,7

这是online table t

我的想法是将上述sql结果转换为@variable,然后对中值子查询条件做出判断,但是我认为这不是很聪明。 谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)