问题描述
这是我的示例表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;中位数是:5
第二段是:5,6,7,8,9;中位数是:7
我希望输出结果: 3,5,7
我的想法是将上述sql结果转换为@variable,然后对中值子查询条件做出判断,但是我认为这不是很聪明。 谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)