Oracle rownum = 1 无法从集合中选择最顶部的行。
Oracle rownum = 1 无法从集合中选择最顶部的行。
我需要从两个表中选择,
RATING_TABLE
RATING_TYPE RATING_PRIORITY TITAN 1 PLATINUM(+) 1 PLATINUM 2 DIAMOND(+) 3 DIAMOND 3 GOLD 4 SILVER 4
RATING_STORAGE
RATING AMOUNT SILVER 200 GOLD 510 DIAMOND 850 PLATINUM(+) 980 TITAN 5000
我想根据RATING_TABLE中的RATING_PRIORITY从RATING_STORAGE表中选择评级。
我想选择具有最低评级优先级的一行数据。如果两个评级优先级相等,我想选择具有最低金额的那个。
所以我使用了以下查询语句,
select s.rating,s.amount from RATING_TABLE r, RATING_STORAGE s where r.rating_type= s.rating_type and rownum=1 order by r.rating_priority asc , s.amount asc ;
当对结果进行排序时,我得到了正确的输出,但是rownum=1没有给出最顶部的一行。
提前致谢。
问题原因:在Oracle中,使用rownum来选择顶部行时,不能在排序之前进行选择。因此,在给定的查询中,无法正确选择最顶部的行。
解决方法:可以通过使用子查询来解决此问题。在子查询中,首先对数据进行排序,然后再使用rownum来选择顶部行。然后,在外部查询中再次使用rownum来选择最顶部的行。
下面是修改后的代码:
select * from ( select s.rating, s.amount from rating_table r, rating_storage s where r.rating_type = s.rating_type order by r.rating_priority asc, s.amount asc ) where rownum = 1;
感谢你的回答。我在存储过程中使用这个查询,并且必须使用INTO子句来存储所选的值,但是却出现了错误。