鉴于您之前的问题是用 SQL Server 标记的,我假设这就是您正在使用的。在这种情况下,您可以使用 PERCENTILE_CONT() 或 PERCENTILE_DISC()
例如
SELECT t.Col,
Median_Cont = PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY t.Col) OVER(),
Median_Disc = PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY t.Col) OVER()
FROM (VALUES (1), (2), (3), (4)) AS t (Col);
给予:
Col Median_Cont Median_Disc
--------------------------------------
1 2.5 2
2 2.5 2
3 2.5 2
4 2.5 2
或者为了限制你的结果,你需要一个子查询:
SELECT t.Col
FROM ( SELECT t.Col,
Median_Disc = PERCENTILE_DISC(0.5)
WITHIN GROUP(ORDER BY t.Col) OVER()
FROM (VALUES (1), (2), (3), (4)) AS t (Col)
) AS t
WHERE t.Col = t.Median_Disc;
结果
Col
-----
2
对于您的具体示例,我认为您还需要包含 PARTITION BY 以确保每个主题计算中位数:
SELECT r.subject_code, r.score, r.Date
FROM ( SELECT r.*,
Median = PERCENTILE_DISC(0.5)
WITHIN GROUP(ORDER BY r.Score)
OVER(PARTITION BY r.Subject_Code)
FROM Results_tbl AS r
) AS r
WHERE r.Score = r.Median;