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;
在这个查询中,所有员工都将根据工资降序排列,并分配一个行号。