admin

更优雅的SQL?

sql

下面的查询功能完善,可以查询单个表以查找通过序列userid号列添加的最近50个用户名。

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

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

SELECT username  
FROM table  
WHERE userid IN  
  (SELECT userid  
   FROM table  
   WHERE userid >  
    (SELECT MAX(userid) -50  
     FROM table))

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

欢呼声,非常感谢
阿里


阅读 206

收藏
2021-06-07

共1个答案

admin

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

但是请注意,请注意行数是在谓词之后但在ORDER BY之前分配给查询结果的。尝试如下操作:

SELECT username  
FROM 
  (SELECT username  
   FROM table  
   ORDER BY userid DESC)
WHERE rownum <= 50
2021-06-07