SQL题目请教

想问下老师们这道题:


我目前的写法是这样的:

但是提交的时候显示Invalid use of group function;我看到答案有人是这样写的通过了:

我的问题是:
1)其实这种通过了的写法和window function的思路其实是一样的,为什么这个不报错呢?
2)如果不想用图里通过的这种写法,继续用window function,应该怎么改呢?

  1. 其实你可以看一下这个能过的code,想一下为什么它要用一个变量来存这个value。咱们上课也说过,不要在where里面直接用aggregation function…你要使用的话你需要用一个select max() from的subquery。

  2. window function的话,我提供一个思路给你参考一下。你已经在你的答案中用了row_number(),你可以再用一个row_number(),但是order by的顺序不一样,就变成row_number(order by asc) as rn1和row_number(order by desc) as rn2。然后你可以观察一下规律,如果是奇数个数的话,median就是rn1=rn2的那个,如果是偶数个数的话,median就是rn1=rn2+1和rn1=rn2-1的那个两个数除二。