什么是中位数
来看看百度百科对中位数的定义
换言之,给一堆数,先按从小到大排列,
如果它们是奇数个,那么中位数就是排位中间的数字,例如,1,2,3,4,5的中位数是3
如果它们是偶数个,那么中位数是排位中间的两数之和除以2,例如,1,2,3,4,5,6的中位数是(3+4)/2=3.5
怎么用SQL计算中位数
在PG中,例如我们有一张sales(order_date,amount)表
postgres=# create table sales(order_date date,sale int);
postgres=# insert into sales values('2020-04-01',210),
('2020-04-02',125),('2020-04-03',150),('2020-04-04',230),
('2020-04-05',200),('2020-04-10',220),('2020-04-06',25),
('2020-04-07',215),('2020-04-08',300),('2020-04-09',250);
postgres=# select * from sales;
order_date | sale
------------+------
2020-04-01 | 210
2020-04-02 | 125
2020-04-03 | 150
2020-04-04 | 230
2020-04-05 | 200
2020-04-10 | 220
2020-04-06 | 25
2020-04-07 | 215
2020-04-08 | 300
2020-04-09 | 250
我们可以用PERCENTILE_CONT(0.5)计算中位数
postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales;
percentile_cont
-----------------
212.5
上面的语句中,
WITHIN GROUP(ORDER BY sale) 是把数据集从小到大排列
PERCENTILE_CONT(0.5)是计算其五十分位的数