日期:2014-05-17  浏览次数:20997 次

关于Oracle中取最大值的一点疑惑...
在sql   server中
select   top   1   id   from   table1   order   by   price   desc
会先将price排逆序   然后取第一个   这根下面这个是一样的
select   id   from   table1   where   price=(select   max(price)   from   table1)
在oracle中好像只能用第二种方式来写
select   id   from   table1   where   rownum=1   order   by   price   desc
好像是先随机取一条数据   然后把rownum=1   附加在该记录后面   明显不符合要求
如果先排序
select   id   from   (select   id   from   table1   order   by   price   desc   )   where   rownum=1
我的目的就是先排序   然后再取第一条(这个是否应该也是从括号里面select的结果中随机取一条记录?   并不一定取price最大的那个)

如果出现上面这种情况,sql语句一般怎么处理?

------解决方案--------------------
rownum是ORACLE的伪列,

若想取最大值,可以使用你的最后一种方法:
select id from (select id from table1 order by price desc ) where rownum=1
------解决方案--------------------
楼上的可以,如果想要准确的
我给你提供一个取任意行的
SELECT ID FROM(
select ROWNUM RN,id from (select id from table1 order by price desc ))
WHERE RN = 1 --(RN BETWEEN 11 AND 20) 这方法可以帮助你分页等类似的功能

------解决方案--------------------
帮你顶
------解决方案--------------------
SELECT ID FROM(
select ROWNUM RN,id from (select id from table1 order by price desc ))
WHERE RN = 1 --(RN BETWEEN 11 AND 20) 这方法可以帮助你分页等类似的功能
------解决方案--------------------
select id from (select id from table1 order by price desc ) where rownum=1
你这个取到的是你原始表里的第一条,隐藏项rownum的值并没因为你的排序而改变,楼上的那个方法很好.
------解决方案--------------------
tgm78(shop34161266.taobao.com)

你为什么吧我再别地方的话拿过来用?连个招呼也不打
------解决方案--------------------
蝌蚪发彪了。哈哈
------解决方案--------------------
哈哈哈 也许人家也是那么想的那

说明你们俩想到一块去了 呵呵
------解决方案--------------------
想到一块也不能大小写 换行的地方, 注释 都一摸一样吧
哈哈
共同学习,我没其他意思
开个玩笑