特定
CREATE TABLE Foo(v1 integer, v2 integer);
INSERT INTO Foo VALUES (1,2);
INSERT INTO Foo VALUES (3,4);
INSERT INTO Foo VALUES (5,6);
Run Code Online (Sandbox Code Playgroud)
和
SELECT COUNT(*) FROM Foo WHERE mod(rownum,2) = 0;
Run Code Online (Sandbox Code Playgroud)
返回0行,它应返回1
SELECT COUNT(*) FROM (SELECT mod(rownum,2) z FROM Foo) tt WHERE z=0;
Run Code Online (Sandbox Code Playgroud)
返回1行
我在这里错过了什么?我没有在ROWNUM或MOD文档中看到任何暗示任何想法的内容.
ROWNUM在您查询之前不会分配,因此您将无法在WHERE类似的子句中使用它.
您可以执行以下操作:
SELECT COUNT(*)
FROM
(
select v1, v2, rownum rn
from Foo
) f
WHERE mod(rn,2) = 0;
Run Code Online (Sandbox Code Playgroud)
的ROWNUM是该行的位置INS的结果集,并选择了记录后进行评估.
这些类型的查询永远不会起作用:
WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y
Run Code Online (Sandbox Code Playgroud)
但这会奏效
WHERE ROWNUM < x
Run Code Online (Sandbox Code Playgroud)
由于您想要rownum使用该mod功能进行评估,因此无法使用该功能,因为此时rownum无法使用.这就是为什么,您必须将它放在子查询中才能使用该mod函数.
| 归档时间: |
|
| 查看次数: |
6060 次 |
| 最近记录: |