gpt4 book ai didi

sql - 如何解释 Postgresql rank() 关系

转载 作者:行者123 更新时间:2023-11-29 11:56:33 26 4
gpt4 key购买 nike

我有一个包含 30 行的 teams 表,并且有一些统计信息存储为属性。例如,目标、目标等,我已经创建了一个使用 rank() 的 View ,并且可以很好地对记录进行排名。这是一个简化的查询示例和结果表:

SELECT name,
points,
rank() OVER (ORDER BY points DESC) AS point_tank
FROM teams;


name | points | point_rank
-----------------------+-----------+----------------
Team 1 | 14 | 1
Team 2 | 11 | 2
Team 3 | 9 | 3
Team 4 | 9 | 3

我想添加一个附加列,该列将根据排名是否平局返回 bool 值。例如本例中的第 3 队和第 4 队。它可能看起来像这样:

         name          | points    | point_rank     | tie
-----------------------+-----------+----------------+----------------
Team 1 | 14 | 1 | false
Team 2 | 11 | 2 | false
Team 3 | 9 | 3 | true
Team 4 | 9 | 3 | true

这里有什么想法吗?或者我是否错误地处理了这个问题并在这里滥用了 rank() ?提前致谢!

最佳答案

您可以使用 CTE,然后使用滞后/超前函数来检查关系:

with ranked as (
SELECT name,
points,
rank() OVER (ORDER BY points DESC) AS point_rank
FROM teams
)
select name, points, point_rank,
( point_rank = lag(point_rank, 1, -1::bigint) over (order by point_rank)
or point_rank = lead(point_rank, 1, -1::bigint) over (order by point_rank)
) as is_tie
from ranked;

第一行和最后一行需要 lag 和 lead 函数的默认值,以避免在那里检查 null。

示例:https://dbfiddle.uk/-01aFLr4

关于sql - 如何解释 Postgresql rank() 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40099387/

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