SQLite 有一个 RANK() 函数
SELECT
*,
RANK () OVER (
ORDER BY age DESC
) age_rank
FROM
yourtable
这将返回所有条目,新的第三行表示他们的年龄等级
在我的测试中,这也会按照 RANK() 中的指定顺序对结果进行排序
请记住,您添加的任何 WHERE 子句都会影响排名,为了获得 一个 元素的排名,您需要一些嵌套语句
SELECT
*
FROM (
SELECT
*,
RANK () OVER (
ORDER BY age DESC
) age_rank
FROM
yourtable
)
WHERE
name = "Zek";
您还可以通过嵌套语句获得nth 最旧的
SELECT
*
FROM (
SELECT
*,
RANK () OVER (
ORDER BY age DESC
) age_rank
FROM
yourtable
)
WHERE
age_rank = 2;
我在测试中发现的一件可能很重要的事情是,所有相同的值都具有相同的等级。我个人认为这很好,但可能很重要
RANK() OVER (
PARTITION BY <expression1>[{,<expression2>...}]
ORDER BY <expression1> [ASC|DESC], [{,<expression1>...}]
)
pretty good tutorial i found
reference to it in official docs though does not explain how it works
当然,sqlite 的“乐趣”是每个实现都是不同的,虽然它在官方文档中,所以我无法想象它会那么罕见