oraclesql查询中ROWNUM的正确使用
我想找到城市和城市长度(即单词city中的字符数),其中城市长度在表中是最大的。如果我们有多个值,我们必须根据城市的字母顺序只取第一个值 我观察到一件奇怪的事情:oraclesql查询中ROWNUM的正确使用,sql,database,oracle,oracle12c,Sql,Database,Oracle,Oracle12c,我想找到城市和城市长度(即单词city中的字符数),其中城市长度在表中是最大的。如果我们有多个值,我们必须根据城市的字母顺序只取第一个值 我观察到一件奇怪的事情: SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) DESC, CITY; 给我一个正确的表格,其中所需的输出作为长度(City)=21的第一行。但是,当我尝试使用 SELECT CITY, LENGTH(CITY) FROM STATION WHERE ROWN
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) DESC, CITY;
给我一个正确的表格,其中所需的输出作为长度(City)=21的第一行。但是,当我尝试使用
SELECT CITY, LENGTH(CITY) FROM STATION WHERE ROWNUM = 1 ORDER BY LENGTH(CITY) DESC, CITY;
在Oracle中查询它会给我提供另一行,该行的长度(City)=12
请帮助我了解出了什么问题!另外,仅供参考,只有一个值具有最大城市长度。查询的
WHERE
子句在ORDER BY
之前执行,因此ROWNUM=1
不是预期的行。您可以使用仅获取第一行
:
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) DESC, CITY
FETCH FIRST ROW ONLY;
。。。或者您将语句放入子选择中,并在此子选择中使用WHERE
和ROWNUM
:
SELECT *
FROM (
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) DESC, CITY
)x WHERE ROWNUM = 1;
rownum
工作正常。where
子句在order by
之前处理。您可以改为使用子查询:
SELECT S.*
FROM (SELECT CITY, LENGTH(CITY)
FROM STATION S
ORDER BY LENGTH(CITY) DESC, CITY
) S
WHERE ROWNUM = 1 ;
或者,更好的方法是使用Oracle多年来提供的FETCH
:
SELECT CITY, LENGTH(CITY)
FROM STATION S
ORDER BY LENGTH(CITY) DESC, CITY
FETCH FIRST 1 ROW ONLY;
您也可以这样做:
select city, length_city
from ( SELECT CITY
, LENGTH(CITY) length_city
, row_number() over(order by LENGTH(CITY) DESC, CITY) rn
FROM STATION)
where rn =1;
这里有一个小的Hi@AmitPathak,很高兴收到您的反馈。你可以接受正确的答案,如果一些答案不好,你可以发表评论,这样我们就可以知道为什么不好,然后尝试帮助更多。。。干杯您好@VBoka您能解释一下您使用的over关键字吗?Hi@AmitPathak这是我找到的,这样我就可以快速而有帮助地回答您:如果还不够,请告诉我