📜  dense_rank vs row_number (1)

📅  最后修改于: 2023-12-03 15:00:23.915000             🧑  作者: Mango

程序员必知:DENSE_RANK vs ROW_NUMBER

简介

在SQL中,DENSE_RANK和ROW_NUMBER两个函数都是用于排序的。它们可以帮助程序员更好地对数据进行处理和分析。本文将介绍DENSE_RANK和ROW_NUMBER这两个函数的区别和用法。

DENSE_RANK

DENSE_RANK函数是在排序后返回一个将相同值视为一组的分组排名。它不会略过排序过程中的重复值,而是给出相同值的组内排名,并将它们视为同一级别(密集级别)。

语法:

DENSE_RANK() over (order by [列名] [asc/desc])

示例:

SELECT name, salary, dense_rank() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;
ROW_NUMBER

ROW_NUMBER函数是在排序后为每一行分配一个唯一的序号。这个序号是非常有用的,因为它是每行数据的唯一标识。ROW_NUMBER函数会忽略排序过程中的重复值。

语法:

ROW_NUMBER() over (order by [列名] [asc/desc])

示例:

SELECT name, salary, row_number() OVER (ORDER BY salary DESC) AS row_number
FROM employees;
区别
  • DENSE_RANK函数将重复值分在同一组,给出相同值的组内排名,并将它们视为同一级别(密集级别);ROW_NUMBER函数会忽略排序过程中的重复值,为每一行数据分配一个唯一的序号。
  • DENSE_RANK函数的排名结果是一个整数,代表的是相对于其它行的密集级别;ROW_NUMBER函数的排名结果也是一个整数,代表的是该行数据在排序后的位置。
总结

DENSE_RANK和ROW_NUMBER是两个非常实用的函数,在数据处理和分析中能够带来很大的便利。程序员必须熟练掌握这两个函数的使用,才能更好地开发高效的SQL查询语句。