起因:数据库里有商品在不同地区,不同时间段,不同渠道的销售价格,想取个平均值。但因为数据是各个网点统计上来的,有个别错列了,导致有的价格失真(像一盒糖卖几万块,但实际是错列了,几万是商品编号)。因为数据量太大,没法一一修正,想到用中位数来代替,但mysql没有现成的中位数函数,琢磨半天想到的,记录出来分享一下。
这个方法也可以用来算四分位数等
复习一下什么是中位数:
一串数字,按从小到大排列,当总数是奇数时,取最中间的数;当总数是偶数时,取最中间两个数的平均数。
解决思路:
按定义来,先排列,找出最中间的数,再取平均值。
准备表如下:
create table student (
id varchar(32) primary key,
value int
);
insert into student (id,value) values ('A',40);
insert into student (id,value) values ('B',50);
insert into student (id,value) values ('C',60);
insert into student (id,value) values ('D',70);
insert into student (id,value) values ('E',80);
insert