我想从TABLE员工中选择第三名工资。正如您在下面看到的,我已经写了QUERY,但是很遗憾,它给了我0条记录。有人可以帮我这个话题吗?我正在使用Oracle DBMS :),这是我的数据库示例:SQL Fiddle
SELECT *
FROM
(SELECT ROWNUM, salary
FROM
(SELECT DISTINCT salary
FROM employees
ORDER BY salary desc)
)
WHERE ROWNUM = 3;
答案 0 :(得分:2)
似乎是Oracle(ROWNUM,并且派生表没有别名)。 ROWNUM是针对结果行计算的,因此,您永远无法为任何大于1的ROWNUM进行过滤。
您需要标准SQL ROW_NUMBER:
SELECT *
FROM
( SELECT salary
,row_number() over (ORDER BY salary desc) as rn
FROM employees
GROUP BY salary
) dt
WHERE rn = 3;
GROUP BY等效于DISTINCT,但在ROW_NUMBER之前 处理,而DISTINCT在之后处理。
编辑:
如果要使用ROWNUM,则必须为其加上别名:
SELECT *
FROM
(SELECT ROWNUM as rn, salary
FROM
(SELECT DISTINCT salary
FROM employees
ORDER BY salary desc)
)
WHERE rn = 3;
答案 1 :(得分:0)
在标准SQL,大多数数据库和Oracle 12C +中,您可以改为使用:
SELECT DISTINCT salary
FROM employees
ORDER BY salary desc
OFFSET 2 ROWS FETCH NEXT 1 ROW ONLY;