我需要按一个属性对给定的表进行排序,然后将排序后的表的顺序存储在 SQLite 中该表的一列中。这怎么能做到?
样表:
CREATE TABLE t0 (name TEXT, sortId INT)
INSERT INTO t0 VALUES ('C', NULL)
INSERT INTO t0 VALUES ('A', NULL)
INSERT INTO t0 VALUES ('B', NULL)
现在我需要按属性“name”对该表进行排序,并通过“sortId”列中的更新命令存储排序行的索引。结果应该是这样的:
name sortId
---- ------
C 3
A 1
B 2
如何做到这一点?
在
ROW_NUMBER()
中使用CTE
窗口函数获取每一行的排名并将其加入UPDATE
语句中的表:
WITH cte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY name) AS rn FROM t0)
UPDATE t0
SET sortId = cte.rn
FROM cte
WHERE cte.id = t0.id;
查看演示。