Oracle rownum = 1 无法从集合中选择最顶部的行。

10 浏览
0 Comments

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没有给出最顶部的一行。

提前致谢。

0
0 Comments

问题原因:在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子句来存储所选的值,但是却出现了错误。

0