中位数定义为将数据集的上半部分与下半部分分开的数字。从STATION查询北纬的中值(LAT_N),然后将答案四舍五入到小数位。
输入格式
STATION表描述如下:
其中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);
我没有从该查询中获得输出。 谁能解释这是什么错误?
答案 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,您应该对这部分逻辑更为精确。