gpt4 book ai didi

sql - SQLite:添加包含行位置的列

转载 作者:行者123 更新时间:2023-12-03 17:17:59 25 4
gpt4 key购买 nike

我有一个SQLite表,我需要添加一列,其中包含SELECT指令指定的行位置。
SELECT指令包含两个ord​​er子句。

如果不清楚,下面是一个示例:
给定此数据:

id        | c1      | c2 
===============================
a | 1 | 2
b | 1 | 3
c | 1 | 1
d | 2 | 2
e | 2 | 3
f | 2 | 1


而这个查询:

SELECT * FROM table ORDER BY c1, c2


我需要这个结果表:

id        | c1      | c2      | position
=========================================
a | 1 | 2 | 2
b | 1 | 3 | 3
c | 1 | 1 | 1
d | 2 | 2 | 5
e | 2 | 3 | 6
f | 2 | 1 | 4


我该怎么做?

重要的提示:
这不是实际数据,甚至不是实际列。这只是一个例子。

最佳答案

此查询应为您提供所有您需要的字段:

SELECT 
( SELECT COUNT(0)
FROM MyTable T1
WHERE (T1.c1 * 1000) + T1.c2 <= (T2.c1 * 1000) + T2.c2
) as 'position',
c1,
c2,
ID
FROM
MyTable T2
ORDER BY
(c1 * 1000) + c2

现在,要按ID订购它们:
SELECT ID, c1, c2, position FROM
(SELECT
(SELECT COUNT(0)
FROM MyTable T1
WHERE (T1.c1 * 1000) + T1.c2 <= (T2.c1 * 1000) + T2.c2
) as 'position',
c1,
c2,
ID
FROM
MyTable T2
ORDER BY
(c1 * 1000) + c2
) T3
ORDER BY ID

笔记

如果内部 Order By不起作用,则可以将中间结果转储到临时表中,然后从临时表中选择带有最终Order By子句的内容。
上面的“ 1000”是系数。您需要确保该系数大于c2的最大值,但又不要太高,以至于出现整数溢出。

替代方法
您可以使用AutoIncrement列插入临时表,然后根据所需顺序从该临时表中选择值。
http://www.sqlite.org/autoinc.html

关于sql - SQLite:添加包含行位置的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com