58同城大数据面试题及参考答案

ROW_NUMBER、RANK、DENSE_RANK 函数的区别是什么?

这三个函数均为窗口函数,用于为结果集分区中的行生成序号,但核心逻辑存在显著差异,具体表现如下:

数据分布与排序规则
假设存在分区内分数数据为 [90, 85, 85, 80],按分数降序排序:

  • ROW_NUMBER:为分区内每行分配唯一序号,即使值相同也不重复。上述数据的序号为 1, 2, 3, 4
  • RANK:相同值分配相同序号,后续序号跳过重复值的数量。上述数据的序号为 1, 2, 2, 4(两个 85 分同为第 2 名,下一名直接为第 4 名)。
  • DENSE_RANK:相同值分配相同序号,后续序号连续递增。上述数据的序号为 1, 2, 2, 3(两个 85 分同为第 2 名,下一名为第 3 名)。

适用场景

  • ROW_NUMBER:常用于强制去重或分页场景,例如从每个班级中

你可能感兴趣的:(Spark,SQL,Hive,SQL,Reduce,Shuffle,维度建模,数仓分层,MAP,JOIN)