我有一个表teams
,它有30行,有一些统计数据以属性的形式存储。例如,goals for,goals against等。我创建了一个视图,它使用rank()对记录进行了很好的排序。下面是一个简短的查询示例和结果表:
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
我想添加一个额外的列,它将根据排名是否为平局返回布尔值。例如,本例中的Team 3和Team 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()?提前感谢!
3条答案
按热度按时间w1jd8yoj1#
您可以使用CTE,然后使用滞后/超前函数来检查是否有并列关系:
第一行和最后一行需要lag和lead函数的默认值,以避免在那里检查空值。
示例:https://dbfiddle.uk/-01aFLr4
pw136qt22#
一种方法是将当前查询放入公用表表达式中,然后使用它来标识哪些排名重复:
xesrikrc3#
结果(我额外添加了两行):