如何在 SQLite 中获取排序表的 ROWID 或行顺序?

问题描述 投票:0回答:1

我需要按一个属性对给定的表进行排序,然后将排序后的表的顺序存储在 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

如何做到这一点?

sqlite sorting rowid
1个回答
0
投票

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;

查看演示

© www.soinside.com 2019 - 2024. All rights reserved.