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

這就解決了中位數定義中如果總個數是奇數只取一位,總個數是偶數取中間兩個的平均數的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章