我正在使用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”)
答案 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
);