如何从oracle中的表中选择偶数记录?

Sai*_*Sai 9 sql oracle

我正在使用下面的查询来检索偶数编号的记录.但是在reslut中它没有显示任何行

select ename,job from emp where mod(rownum,2)=0;
Run Code Online (Sandbox Code Playgroud)

为什么mod(rownum,2)无法在conditiom工作

请你也可以给查询选择奇数记录

该查询有什么问题吗?

建议请..

MT0*_*MT0 13

它不起作用是因为:对于第一行ROWNUM是,1并且在这种情况下MOD(ROWNUM,2)1,因为你的WHERE语句MOD(ROWNUM,2)=0然后减少到1=0并且行被丢弃.然后将针对1 ROWNUM的1 来测试后续行(因为前一行不再在输出中并且将不具有行号),这将再次使测试失败并被丢弃.重复,恶心,所有行都无法通过WHERE测试并被丢弃.

如果您尝试以这种方式使用奇数行,WHERE MOD(ROWNUM,2)=1那么它将仅返回第一行,第二行和后续行将无法通过测试,并且永远不会包含在查询中.

正如Vijaykumar Hadalgi建议的那样,你需要在子查询中选择ROWNUM(它可以在没有where子句的情况下对所有行进行编号以限制它),然后在外部查询中执行测试以限制行:

WITH subquery AS (
  SELECT ename,job,ROWNUM AS row_id
  FROM   Emp
  ORDER BY ename
)
SELECT ename, job
FROM   subquery
WHERE  MOD( row_id, 2 ) = 0;
Run Code Online (Sandbox Code Playgroud)

SQLFIDDLE


Akh*_*nan 5

尝试这个

要查找偶数行详细信息,您可以使用此代码。 这个在 oracle SQL 和 MySQL 中都很舒服。

select * from (select ename,job, ROWNUM AS rn from emp) where mod(rn, 2) = 0;
Run Code Online (Sandbox Code Playgroud)

要查找行详细信息的奇数,您可以使用此代码。

select * from (select ename,job, ROWNUM AS rn from emp) where mod(rn, 2) <> 0;
Run Code Online (Sandbox Code Playgroud)


vha*_*lgi -3

请尝试 :

select * from emp where (rowid,0) in (select rowid, mod(rownum,2) from emp)
Run Code Online (Sandbox Code Playgroud)

输出:- 2 4 6

Select * from emp where (rowid,1) in (select rowid, mod(rownum,2) from emp);
Run Code Online (Sandbox Code Playgroud)

输出:1,3,5..

或者这会起作用

这 :

奇怪的 :

select * from
( 
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber', 
FROM table1
 ) d 
where (RowNumber % 2) = 1 
Run Code Online (Sandbox Code Playgroud)

甚至 :

select * from
( 
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber', 
FROM table1
) d 
where (RowNumber % 2) = 0
Run Code Online (Sandbox Code Playgroud)