更优雅的SQL?

Ali*_*i J 2 sql database oracle

下面的查询功能完备,查询单个表以查找通过序列userid号列添加的最后50个用户名.

到目前为止的逻辑是:找出最高的用户ID; 从中减去50; 将用户名拉回到更大的位置.

但是,它看起来并不优雅,并使用两个子查询来实现它的目标:

SELECT username  
FROM table  
WHERE userid IN  
  (SELECT userid  
   FROM table  
   WHERE userid >  
    (SELECT MAX(userid) -50  
     FROM table))
Run Code Online (Sandbox Code Playgroud)

有没有办法减少嵌套?更高效?更优雅?任何帮助将不胜感激,因为这不是最好的方式!

干杯和非常感谢
阿里

Chr*_*lls 6

提供的答案是正确的.您可以使用ROWNUM选择TOP-N样式结果.

请注意,请注意在预测之后但在ORDER BY之前将rownum分配给查询结果.尝试以下内容:

SELECT username  
FROM 
  (SELECT username  
   FROM table  
   ORDER BY userid DESC)
WHERE rownum <= 50
Run Code Online (Sandbox Code Playgroud)