我希望你能帮我做作业:)
我们需要构建一个输出前N名最佳薪酬员工的查询.
我的版本完美无缺.
例如前三名:
SELECT name, salary
FROM staff
WHERE salary IN ( SELECT *
FROM ( SELECT salary
FROM staff
ORDER BY salary DESC )
WHERE ROWNUM <= 3 )
ORDER BY salary DESC
;
Run Code Online (Sandbox Code Playgroud)
请注意,这将输出位于前3名且薪水相同的员工.
1:Mike,4080
2:Steve,2800
2:Susan,2800
2:Jack,2800
3:Chloe,1400
但现在我们的老师不允许我们使用ROWNUM.
我搜索得很远,没有找到任何可用的东西.
我的第二个解决方案归功于Justin Caves的暗示.
首先我试过这个:
SELECT name, salary, ( rank() OVER ( ORDER BY salary DESC ) ) as myorder
FROM staff
WHERE myorder <= 3
;
Run Code Online (Sandbox Code Playgroud)
错误消息是:"myorder:invalid identifier"
感谢DCookie,现在很清楚:
"[...]在评估where子句之后应用分析,这就是为什么你得到myorder是无效标识符的错误."
包装SELECT解决了这个问题:
SELECT *
FROM …Run Code Online (Sandbox Code Playgroud)