gpt4 book ai didi

PostgreSQL:有效地获得序数排名(行索引?)

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

你有一个像这样的表:

id dollars dollars_rank points points_rank
1 20 1 35 1
2 18 2 30 3
3 10 3 33 2

我想要一个更新表的排名列(dollars_rankpoints_rank)的查询来设置给定 ID 的排名,这只是该 ID 的行索引按相关列降序排列。如何在 PostgreSQL 中最好地做到这一点?

最佳答案

窗口函数dense_rank()是您需要的 - 或者可能是 rank()UPDATE 可能如下所示:

UPDATE tbl
SET dollars_rank = r.d_rnk
, points_rank = r.p_rnk
FROM (
SELECT id
, dense_rank() OVER (ORDER BY dollars DESC NULLS LAST) AS d_rnk
, dense_rank() OVER (ORDER BY points DESC NULLS LAST) AS p_rnk
FROM tbl
) r
WHERE tbl.id = r.id;

fiddle

NULLS LAST 仅在涉及的列可以为 NULL 时才相关:

关于PostgreSQL:有效地获得序数排名(行索引?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424822/

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