SQL row_number()函数

2024年06月25日 SQL row number 函数 极客笔记

SQL row_number()函数

在SQL中,ROW_NUMBER()函数是一种用于给查询结果集中的行添加行号的函数。它可以根据指定的列或排序规则对结果集进行排序,并为每一行分配一个唯一的行号。

语法

ROW_NUMBER() OVER (ORDER BY column_name)

  • ROW_NUMBER(): 表示要使用的函数,用于给每一行分配一个行号。
  • OVER: 用于指定要对哪些行进行排序并分配行号。
  • ORDER BY column_name: 按照指定的列进行排序,可以是一个或多个列。

示例

假设我们有一个名为employees的表,包含员工的姓名和薪水信息。我们想要对员工按照薪水从高到低进行排序,并为每个员工分配一个行号。

employees表

employee_id name salary
1 Alice 5000
2 Bob 6000
3 Charlie 4500
4 David 7000
5 Emma 5500

SQL查询

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

运行结果

name salary row_number
David 7000 1
Bob 6000 2
Emma 5500 3
Alice 5000 4
Charlie 4500 5

在上面的示例中,我们使用ROW_NUMBER() OVER (ORDER BY salary DESC)employees表按照薪水从高到底进行排序,并为每个员工分配了一个行号。最终的结果集中,每一行都有一个row_number列,表示该行在排序后的顺序。

使用PARTITION BY

除了简单地对整个结果集进行排序外,ROW_NUMBER()函数还支持使用PARTITION BY对结果进行分区。这样可以在每个分区内独立地分配行号。

示例

假设我们想要按照部门对员工进行分组,并且在每个部门内按照薪水排序并分配行号。

employees表

employee_id name department salary
1 Alice HR 5000
2 Bob HR 6000
3 Charlie Sales 4500
4 David Sales 7000
5 Emma Sales 5500

SQL查询

SELECT 
  name,
  department,
  salary,
  ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_number
FROM employees;

运行结果

name department salary row_number
Bob HR 6000 1
Alice HR 5000 2
David Sales 7000 1
Emma Sales 5500 2
Charlie Sales 4500 3

在上面的示例中,我们对employees表按照department列进行分区,并在每个部门内按照薪水进行排序并分配行号。结果中可以看到,在每个部门内员工的行号是独立的,即每个部门内的第一个员工行号都是1。

通过ROW_NUMBER()函数,我们可以方便地对SQL查询结果中的行进行排序并分配行号。这在一些需要对结果做进一步分析或报告生成的场景中非常有用。

本文链接:http://so.lmcjl.com/news/7238/

展开阅读全文