ORACLE 12C - SELECT 使用 ROWNUM 的查询
ORACLE 12C - SELECT query using ROWNUM
我必须使用 ROWNUM 从排序的 table 中获得第二个五 (6-10) 个最佳薪水记录。
必须使用 ROWNUM。
当我执行查询时:
SELECT ROWNUM AS position, name, salary
FROM (SELECT name, salary
FROM employees
ORDER BY salary DESC)
WHERE ROWNUM <= 10;
我获得了前 10 个最佳记录。
现在当我尝试执行查询时:
SELECT ROWNUM AS position, name, salary
FROM (SELECT name, salary
FROM employees
ORDER BY salary DESC)
WHERE ROWNUM >= 6 AND ROWNUM <= 10;
我得到一个空 table。为什么不起作用?
如 documentation 中所述,rownum
在获取行时进行评估。如果您从未获取第一行,则永远无法获取第二行。因此,没有获取任何行:
Conditions testing for ROWNUM
values greater than a positive integer
are always false. For example, this query returns no rows:
SELECT * FROM employees
WHERE ROWNUM > 1;
但是,更重要的是,您使用的是 Oracle 12C。因此,使用 fetch first
而不是 rownum
。这具有多个优点。除了标准 SQL,您不需要子查询:
SELECT name, salary
FROM employees
ORDER BY salary DESC
FETCH FIRST 10 ROWS ONLY;
第二个:
SELECT name, salary
FROM employees
ORDER BY salary DESC
OFFSET 5 ROWS
FETCH FIRST 5 ROWS ONLY;
I write in queston that using ROWNUM is necessary, because it's
academic task.
在这种情况下使用子查询
SELECT name, salary
FROM (
SELECT name, salary, ROWNUM as my_rownum
FROM employees
ORDER BY salary DESC
)
WHERE my_rownum BETWEEN 6 AND 10
您可以使用以下查询并尝试....
SELECT name,salary from
( SELECT name,salary, DENSE_RANK() OVER (ORDER BY salary DESC) as rn
from employees )
where rn between 6 and 10;
我必须使用 ROWNUM 从排序的 table 中获得第二个五 (6-10) 个最佳薪水记录。
必须使用 ROWNUM。
当我执行查询时:
SELECT ROWNUM AS position, name, salary
FROM (SELECT name, salary
FROM employees
ORDER BY salary DESC)
WHERE ROWNUM <= 10;
我获得了前 10 个最佳记录。
现在当我尝试执行查询时:
SELECT ROWNUM AS position, name, salary
FROM (SELECT name, salary
FROM employees
ORDER BY salary DESC)
WHERE ROWNUM >= 6 AND ROWNUM <= 10;
我得到一个空 table。为什么不起作用?
如 documentation 中所述,rownum
在获取行时进行评估。如果您从未获取第一行,则永远无法获取第二行。因此,没有获取任何行:
Conditions testing for
ROWNUM
values greater than a positive integer are always false. For example, this query returns no rows:SELECT * FROM employees WHERE ROWNUM > 1;
但是,更重要的是,您使用的是 Oracle 12C。因此,使用 fetch first
而不是 rownum
。这具有多个优点。除了标准 SQL,您不需要子查询:
SELECT name, salary
FROM employees
ORDER BY salary DESC
FETCH FIRST 10 ROWS ONLY;
第二个:
SELECT name, salary
FROM employees
ORDER BY salary DESC
OFFSET 5 ROWS
FETCH FIRST 5 ROWS ONLY;
I write in queston that using ROWNUM is necessary, because it's academic task.
在这种情况下使用子查询
SELECT name, salary
FROM (
SELECT name, salary, ROWNUM as my_rownum
FROM employees
ORDER BY salary DESC
)
WHERE my_rownum BETWEEN 6 AND 10
您可以使用以下查询并尝试....
SELECT name,salary from
( SELECT name,salary, DENSE_RANK() OVER (ORDER BY salary DESC) as rn
from employees )
where rn between 6 and 10;