题解 | #最差是第几名(二)#
最差是第几名(二)
https://www.nowcoder.com/practice/165d88474d434597bcd2af8bf72b24f1?tpId=82&tags=&title=&difficulty=0&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%3Fpage%3D2%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82
用两个sum窗口函数,一个升序,一个降序,中位数一定满足两个累积和都>=总数/2
SELECT grade from(select grade,sum(number)over(order by grade)sn1,sum(number)over(order by grade desc)sn2
from class_grade)t where sn1>=(select sum(number)/2 from class_grade)
and sn2>=(select sum(number)/2 from class_grade)
order by grade
我还有个想法,可以先用一个sum窗口函数,再对它使用lag窗口函数,应该也可以做。不过估计代码会麻烦一点,会多个子查询,就先不写了
SQL题解 文章被收录于专栏
主要是为自己做个笔记