学校每次考试完,都会有一个成绩表。例如,表中第1行表示编号为1的用户选择了C 岗位,该科目考了11001分。
问题:写一个sql语句查询每个岗位的中位数位置的范围,并且按岗位升序排序,结果如下:
解释:
第1行表示C 岗位的中位数位置范围为[2,2],也就是2。因为C 岗位总共3个人,是奇数,所以中位数位置为2。
第2行表示Java岗位的中位数位置范围为[1,2]。因为Java岗位总共2个人,是偶数,所以要知道中位数,需要知道2个位置的数字,而因为只有2个人,所以中位数位置为[1,2]。
第3行表示前端岗位的中位数位置范围为[2,2],也就是2。因为前端岗位总共3个人,是奇数,所以中位数位置为2。
【解题步骤】
1.要求每个岗位的中位数位置的范围,需要知道每个岗位的总数
那么,如何求每个岗位的总数呢?
看到“每个”,要想到《猴子 从零学会sql》里讲过的,用分组汇总解决这类型问题。按岗位分组(group by),使用汇总函数count()得到岗位总数。
1 select 岗位,count(*) as 总数
2 from 成绩表
3 group by 岗位;