Sql 使用增量值更新列
我有一张这样的桌子Sql 使用增量值更新列,sql,sql-server,Sql,Sql Server,我有一张这样的桌子 userid | points | position 1 | 100 | NULL 2 | 89 | NULL 3 | 107 | NULL 我需要一个按points desc更新位置列顺序的查询,示例结果: userid | points | position 1 | 100 | 2 2 | 89 | 3 3 | 107 | 1 我不会使用依赖于其他行中的值的物理列,否则
userid | points | position
1 | 100 | NULL
2 | 89 | NULL
3 | 107 | NULL
我需要一个按points desc更新位置列顺序的查询,示例结果:
userid | points | position
1 | 100 | 2
2 | 89 | 3
3 | 107 | 1
我不会使用依赖于其他行中的值的物理列,否则每次一行更改时都必须更新整个表。使用视图或其他机制动态计算位置 计算“位置”的查询如下所示:
SELECT
userid,
points,
RANK() OVER (ORDER BY points DESC) AS position
但是,如果您必须将其作为更新
,那么您可以使用
UPDATE a
SET a.position = b.position
FROM {table_name} a
INNER JOIN
(
SELECT
userid,
RANK() OVER (ORDER BY points DESC) AS position
FROM {table_name}
) b
ON a.userid = b.userid
但请记住,每次更新表时都需要运行更新,因此,如果表的大小合适且更新频繁,则性能可能会有问题。我不会使用依赖于其他行中的值的物理列,否则每次一行更改时都必须更新整个表。使用视图或其他机制动态计算位置 计算“位置”的查询如下所示:
SELECT
userid,
points,
RANK() OVER (ORDER BY points DESC) AS position
但是,如果您必须将其作为更新
,那么您可以使用
UPDATE a
SET a.position = b.position
FROM {table_name} a
INNER JOIN
(
SELECT
userid,
RANK() OVER (ORDER BY points DESC) AS position
FROM {table_name}
) b
ON a.userid = b.userid
但请记住,每次更新表时都需要运行更新,因此,如果表的大小合适且更新频繁,则性能可能会有问题。您可以执行以下操作:
UPDATE t
SET position = t2.position
FROM table t
JOIN (
SELECT
userid,
points,
RANK() OVER (ORDER BY points DESC) AS position
FROM table) t2 ON t2.userid = t.userid
您可以这样做:
UPDATE t
SET position = t2.position
FROM table t
JOIN (
SELECT
userid,
points,
RANK() OVER (ORDER BY points DESC) AS position
FROM table) t2 ON t2.userid = t.userid
也考虑使用DeNeSyRANK()代替RANK(),当你想把你的“位置”的排名递增1作为“点”的变化。RANK()将执行您想要的操作,但它将根据“点”中的重复“用户ID”数量(如果您的规范中有这种情况)创建数字序列间隔
参考它们之间的差异。
也考虑使用DeNeSyRANK()代替RANK(),当你想把你的“位置”的排名递增1作为“点”的变化。RANK()将执行您想要的操作,但它将根据“点”中的重复“用户ID”数量(如果您的规范中有这种情况)创建数字序列间隔
关于它们之间的区别,请参阅此部分。您试过什么吗?比如把你的帖子的名字放进谷歌,前面有SQL?是的,但是没有什么对你的要求有用。你试过什么吗?比如说,把你的帖子的名字放进谷歌,前面有SQL?是的,但是没有什么对需求有用。对不起,我需要更新列,而不是获取增量ID,然后使用相同的原理进行更新查询。顺便说一句,假设这个答案与增量ID无关,你确定你真的理解了吗?@DaniloCalzetta我添加了一个潜在的
UPDATE
查询,并给出了相同的注意事项。很抱歉,我需要更新列以不获取增量ID,然后在更新查询中使用相同的原理。顺便说一句,考虑到这个答案与增量ID无关,你确定你真的理解了吗?@DaniloCalzetta我添加了一个潜在的UPDATE
查询,并提出了同样的警告。