第一种求中位数方法:
/*
第一步:添加一个正序和反序
第二步:当列表数目为奇数的时候,列表选出的情况,当列表为偶数的时候列表的情况
第三步:统筹奇数和偶数时中位数
*/
select sum(Math)/count(*) as midean
from
(
select Math, desc_Math, asc_Math
from
(
select *, row_number() over (order by Math desc) as desc_Math,
row_number() over (order by Math asc) as asc_Math
from s448
)as order_table
where asc_Math in (desc_Math, desc_Math+1, desc_Math-1)) as media_number ;
第二种求中位数方法:
/*
第一步:为数据添加索引
第二步:利用索引找出数据的中位数
*/
set @rowidx := -1; -- 声明变量
select avg(n.Math) from
(select @rowidx := @rowidx + 1 as rowidx, Math from s448 order by Math) as n
where n.rowidx in (floor(@rowidx/2), ceil(@rowidx/2));