0%

mysql中位数

本文是在mysql中查询一列奇数个数据的中位数。

HackerRank刷题的时候遇到了一道需要查询中位数的题目。

题目

将中位数定义为:将数据集的上半部分与下半部分分开的数字,也就是仅存在一个中位数。

需要找出某列的中位数。

思路

Station表中存在奇数个数据,那么我们要查找的LAT_N就是将数据分开后使得:上半部分个数=下半部分个数。

于是我们需要在查询该表Station S的同时,再创建两个相同的Station表来计算上下部分的LAT_N个数,在检查记录的同时比较上下两部分的数量,当数量相同的时候,该S.LAT_N就是需要得到的中位数。

方案

1
2
3
4
5
6
7
8
select round(s.LAT_N,4)
from station s
where (select count(LAT_N)
from station
where LAT_N < s.LAT_N) = (
select count(LAT_N)
from station
where (LAT_N > s.LAT_N))

个人收获

当遇到比较抽象的问题的时候,需要学会转换思路,将抽象的中位数定义,转化为现实的,上下部分数量相同问题;也要熟悉mysql中创建新表和原表比较的方法。

------ 本文结束------