先从内部的一个子查询开始 —— 为 @rowindex 赋值的子查询会为每个成绩赋予一个自增后的序号,并对 grades 排序 [译者注:按逻辑和代码是先排序再赋予序号]。
有了排好序的成绩列表之后,外层查询会获取位中间位置的值。如果数组元素是奇数个,两个值都是取的位于正中那个值。
然后,外层查询的 SELECT 子句返回上述两个值的平均值作为中位数。
------------------------------------------------------------------------------------------
A median is defined as a number separating the higher half of a data set from the lower half. Query the median of the Northern Latitudes (LAT_N) from STATION and round your answer to decimal places.
Input Format
The STATION table is described as follows,where LAT_N is the northern latitude and LONG_W is the western longitude.
SET @rowindex := -1;
SELECT
round(AVG(g.LAT_N),4)
FROM
(SELECT @rowindex:=@rowindex + 1 AS rowindex,
station.LAT_N AS LAT_N
FROM station
ORDER BY station.LAT_N) AS g
WHERE
g.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2));