gpt4 book ai didi

sql - 何时选择 rank() 而不是密集的 rank() 或 row_number()

转载 作者:行者123 更新时间:2023-12-04 15:58:14 30 4
gpt4 key购买 nike

由于我们可以使用 row_number() 获得分配的行号如果我们想使用 dense_rank() 在不跳过分区内的任何数字的情况下找到每一行的排名,我们为什么需要rank()功能,我想不出任何用例 rank()函数提供了 dense_rank()row_number()不能满足那个。
是否有任何用例,其中 rank()最适合?

最佳答案

申请时 RANKDENSE_RANK到没有联系的列,它们都会产生由 ROW_NUMBER 生成的相同系列. RANK的区别和 DENSE_RANK出现在有关系的情况下,并且很微妙。考虑下表以及行号、等级和密集等级值:

SALARY | ROW_NUMBER | RANK | DENSE_RANK
1000 | 1 | 1 | 1
1500 | 2 | 2 | 2
1500 | 3 | 2 | 2
2000 | 4 | 4 | 3
2200 | 5 | 5 | 4
2500 | 6 | 6 | 5
2500 | 7 | 6 | 5
2500 | 8 | 6 | 5
3000 | 9 | 9 | 6
希望您能在上面看到,当出现两条或更多条记录并列时, RANK 都会出现。和 DENSE_RANK为所有具有相同值的记录分配相同的等级。然而,它们的不同之处在于 RANK继续与 ROW_NUMBER 一致的排名计数系列,而 DENSE_RANK不会,而是使用重复排名后的下一个值继续排名计数。
现在回到你的问题,你是否选择 RANKDENSE_RANK取决于您的要求。例如,如果您要报告获胜者,并且总是需要报告第一名、第二名和第三名,而不管每个位置的平局如何,您可以使用 DENSE_RANK .否则,您将使用 RANK ,这可能意味着没有第二名或第三名。如果您确定永远不会有重复,那么您可以使用 ROW_NUMBER .

关于sql - 何时选择 rank() 而不是密集的 rank() 或 row_number(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64420584/

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