msyql 计算中位数

MySQL 不像Excel 有mid()函数直接计算中位数,需要用函数来实现具体如下:

首先建立数据表


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);

然后排序并取中位数,注意:

奇数的话直接取中间位数的数即可。

偶数需要取中间两个数的平均数

SELECT 
  GROUP_CONCAT(id),
  AVG(VALUE) 
FROM
  (SELECT 
    id,
    VALUE,
    @index := @index + 1 myIndex 
  FROM
    student,
    (SELECT 
      @index := 0) a 
  ORDER BY VALUE) b 
WHERE FLOOR(@index / 2+1) = myIndex 
  OR CEIL(@index / 2) = myIndex

注意:floor和ceil的顺序,

当@index是奇数时,floor(@index/2+1)和ceil(@index/2)的值一样的,@index=7时,floor(4.5) = ceil(3.5) = 4

当@index是偶数时,floor(@index/2+1)和ceil(@index/2)的值不一样,@index=6时,floor(4) = 4,ceil(3) = 3

这就解决了中位数定义中如果总个数是奇数只取一位,总个数是偶数取中间两个的平均数的问题。

你可能感兴趣的:(mysql)