row_number

如何通过row_number实现窗口函数

小樊
81
2024-10-12 12:23:13
栏目: 编程语言

row_number() 是一个常见的窗口函数,它在 SQL 查询中为结果集中的每一行分配一个唯一的连续整数。这个整数通常基于某个排序顺序,可以是升序或降序。通过使用 row_number(),你可以为数据集添加一个额外的列,该列表示其在排序后的位置。

以下是如何使用 row_number() 的基本语法:

SELECT 
    column1, 
    column2, 
    ..., 
    row_number() OVER (ORDER BY column1, column2, ...) AS row_num
FROM 
    your_table;

在这个例子中,your_table 是你要查询的表名,column1, column2, ... 是你想要根据其进行排序的列名。AS row_num 是可选的,用于给生成的列指定一个别名。

举个例子,假设你有一个名为 employees 的表,其中包含以下列:id, department_id, salary, name。你想要查询每个部门的员工数量,并按照部门ID和工资进行排序。你可以这样写:

SELECT 
    department_id, 
    COUNT(*) AS num_employees, 
    row_number() OVER (PARTITION BY department_id ORDER BY salary) AS emp_num
FROM 
    employees
GROUP BY 
    department_id, 
    salary;

在这个查询中,PARTITION BY department_id 表示 row_number() 函数将为每个部门分别生成行号。ORDER BY salary 表示在每个部门内部,行号将根据工资进行排序。注意,虽然这里没有明确使用 GROUP BY 子句,但由于我们使用了聚合函数 COUNT(*),所以实际上还是在按部门进行分组。

如果你想要在整个结果集上生成行号(而不是按部门),可以省略 PARTITION BY 子句:

SELECT 
    id, 
    department_id, 
    salary, 
    name, 
    row_number() OVER (ORDER BY salary DESC) AS emp_num
FROM 
    employees;

在这个查询中,所有员工都将根据工资降序排列,并分配一个行号。

0
看了该问题的人还看了