从SQL查询中找到中位数

时间:2018-07-17 13:22:16

标签: sql oracle

中位数定义为将数据集的上半部分与下半部分分开的数字。从STATION查询北纬的中值(LAT_N),然后将答案四舍五入到小数位。

输入格式

STATION表描述如下:

enter image description here

其中LAT_N是北纬度,而LONG_W是西经度。

我将查询写为:

select round(LAT_N,4) from (select LAT_N from station order by LAT_N) where ROWNUM = ((LENGTH(LAT_N)+1)/2);

我没有从该查询中获得输出。 谁能解释这是什么错误?

2 个答案:

答案 0 :(得分:3)

在Oracle中,可能最简单的方法是使用median()

select median(LAT_N) 
from stations;

答案 1 :(得分:0)

尝试一下:

select top 1 a.LAT_N, count(*) biggerThan
from
(select LAT_N from station) a join (select LAT_N from station) b on a.LAT_N > b.LAT_N
    join (select count(*) countt from station) counterr on 1 = 1
group by a.LAT_N, counterr.countt
having count(*) > counterr.countt/2 - 1
order by biggerThan

它返回的最小值大于集合成员的大约一半。 我已将“大约一半”定义为countt / 2-1,您应该对这部分逻辑更为精确。