题目
-
题目来源:SQL75 考试分数(四)
-
题目描述
查询各个岗位分数升序排列之后的中位数位置的范围,并且按job升序排序 -
一张表
-
所需结果
题解
偶数a的中位数:a/2,a/2 + 1
奇数b的中位数:b/2
需要注意的是,即使是偶数,也需要强制转换数据为整数,否则下面偶数项的结果并非整数。
错误示范:
# 错误示范
SELECT job,
IF(COUNT(*) % 2 = 0, COUNT(*) / 2, CEILING(COUNT(*)/ 2)) start,
IF(COUNT(*) % 2 = 0, COUNT(*) / 2 + 1, CEILING(COUNT(*) / 2)) end
FROM grade
GROUP BY job
ORDER BY job ASC
得到的是:
B|2|2
C++|2|2
Java|1.0000|2.0000
正解:
# 正解:
SELECT job,
IF(COUNT(*) % 2 = 0, CEILING(COUNT(*) / 2), CEILING(COUNT(*)/ 2)) start,
IF(COUNT(*) % 2 = 0, CEILING(COUNT(*) / 2 + 1), CEILING(COUNT(*) / 2)) end
FROM grade
GROUP BY job
ORDER BY job ASC
得到:
B|2|2
C++|2|2
Java|1|2