gpt4 book ai didi

sql - 如何规范化/更新 "order"列

转载 作者:行者123 更新时间:2023-11-29 11:38:48 27 4
gpt4 key购买 nike

我有一个包含一些数据数据的表“mydata”:

id    name       position
===========================
4 foo -3
6 bar -2
1 baz -1
3 knork -1
5 lift 0
2 pitcher 0

我获取使用 按位置 ASC 排序的表;

position 列值可能不是唯一的(由于某些原因未在此处描述 :-),并且用于在 SELECT 期间提供自定义订单

我想做什么:

我想通过将唯一位置关联到不破坏顺序的每一行来规范化表列“位置”。此外归一化后的最高位置应该是-1。

希望得到的表格内容:

id    name       position
===========================
4 foo -6
6 bar -5
1 baz -4
3 knork -3
5 lift -2
2 pitcher -1

我尝试了几种方法,但未能实现正确 update 语句。

我猜是用

generate_series( -(select count(*) from mydata), -1) 

是获取位置列新值的一个很好的起点,但我不知道如何将生成的列数据合并到更新语句中。

希望有人能帮助我:-)

最佳答案

类似于:

with renumber as (
select id,
-1 * row_number() over (order by position desc, id) as rn
from foo
)
update foo
set position = r.rn
from renumber r
where foo.id = r.id
and position <> r.rn;

SQLFiddle Demo

关于sql - 如何规范化/更新 "order"列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17037304/

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