当按desc排序时,在SQLITE中选择行号X.

时间:2017-09-17 12:01:30

标签: sql sqlite sql-order-by

我正在使用SQLITE(所以没有row_number)

这是我的数据库调用:tableau

ID | Nom  | Score
---|------|------
1  | Clem | 50
2  | Caro | 60
3  | Flo  | 55

我正在使用:

SELECT * FROM tableau ORDER BY Score DESC

这就是我得到的:

ID | Nom  | Score
---|------|------
2  | Caro | 60
3  | Flo  | 55
1  | Clem | 50

但我希望在按降序排序后的第2行获得“Nom”值

我想用:

SELECT Nom FROM tableau WHERE rowid = 2 ORDER BY Score DESC 

但结果是“Caro”(预期结果:“Flo”)

1 个答案:

答案 0 :(得分:0)

不幸的是,SQLite不支持窗口函数或变量,这两种方法将在其他数据库中使用。处理此问题的最佳方法通常是在应用程序层

您可以获取一行的排名,然后使用:

<html>
<head>

<script type="text/javascript" src="https://www.omniva.ee/widget/widget.js"> </script>

<link rel="stylesheet" type="text/css" href="https://www.omniva.ee/widget/widget.css">
<script
  src="https://code.jquery.com/jquery-2.2.4.js"
  integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI="
  crossorigin="anonymous"></script>

</head>
<body>

<div id="omniva_container1"></div>

<script>

$(function () { 
  $( "#omniva_select1" ).change(function() {
 alert('Change event does not fire');
  });
  });

var wd1 = new OmnivaWidget();
</script>

</body>

请注意,这会使得并列分数相同。

我应该注意到你也可以将其命名为:

select t.*
from (select t.*,
             (select 1 + count(*)
              from tableau t2
              where t2.score > t.score
             ) as rnk
      from tableau t
     ) t
where rnk = 2;

编辑:

如果要进行稳定排序,则必须将其包含在逻辑中:

select t.*
from tableau t
where 2 = (select 1 + count(*)
           from tableau t2
           where t2.score > t.score
          );