从数据库中获取中值

use*_*568 4 sql oracle select

中位数定义为将数据集的上半部分与下半部分分开的数字。从 STATION 查询北纬度 (LAT_N) 的中位数,并将结果四舍五入到小数位。

输入格式

STATION表描述如下:

Field : Type
ID    : NUMBER
CITY  : VARCHAR2(21)
STATE : VARCHAR2(2)
LAT_N : NUMBER
LONG_W: NUMBER
Run Code Online (Sandbox Code Playgroud)

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

我只能设法获取中值的行索引

select floor((count(lat_n)+1)/2) from station;
Run Code Online (Sandbox Code Playgroud)

即行索引 250。下一步是使用该值提取行索引 250 处的 lat_n 值。如何转换为 SQL?

Sha*_*sad 6

对于 mySQL这将起作用,

   SELECT ROUND(S1.LAT_N, 4) 
    FROM STATION AS S1 
    WHERE (SELECT ROUND(COUNT(S1.ID)/2) - 1 
           FROM STATION) = 
          (SELECT COUNT(S2.ID) 
           FROM STATION AS S2 
           WHERE S2.LAT_N > S1.LAT_N);
Run Code Online (Sandbox Code Playgroud)

参考: https: //nikkesan.gitbook.io/hackerrank/practice-1/sql/aggregation/untitled-2


小智 6

您可以使用 Oracle 运行以下代码。

SELECT ROUND(MEDIAN(LAT_N), 4)
FROM STATION;
Run Code Online (Sandbox Code Playgroud)