已创建名为geosalary
的表,列为name
、id
和salary
:
name id salary
patrik 2 1000
frank 2 2000
chinmon 3 1300
paddy 3 1700
我尝试了下面的代码来找到第二高的工资:
SELECT salary
FROM (SELECT salary, DENSE_RANK() OVER(ORDER BY SALARY) AS DENSE_RANK FROM geosalary)
WHERE DENSE_RANK = 2;
但是,收到以下错误消息:
ERROR: subquery in FROM must have an alias
SQL state: 42601
Hint: For example, FROM (SELECT ...) [AS] foo.
Character: 24
我的代码有什么问题?
9条答案
按热度按时间mccptt671#
我认为错误信息非常清楚:你的子选择需要别名。
omqzjyyz2#
错误信息非常明显:您需要为子查询提供别名。
备选查询:
这将根据请求查找“第二高工资”(1行)。其他查询查找具有第二高工资的所有员工(1-n行)。
我添加了
NULLS LAST
,因为null
值通常不应该排在第一位。参见:vuv7lop33#
上面的查询将为您提供单个部门中第三高的工资。如果你想不考虑部门,那么只删除PARTITION BY department_id
gwo2fgha4#
您的SQL引擎不知道您正在使用哪个表的“salary”列,这就是为什么您需要使用别名来区分这两个列的原因。试试这个:
ee7vknir5#
bnlyeluc6#
nszi6y057#
如果下面的工资列重复,查询将给出正确的结果:
jyztefdp8#
这里是SQL标准
计算第n个最高薪资变动冲抵值
vmjh9lq99#