我正在使用下面的查询来检索偶数编号的记录.但是在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)
尝试这个
要查找偶数行详细信息,您可以使用此代码。 这个在 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)
归档时间: |
|
查看次数: |
50786 次 |
最近记录: |