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;
在這個查詢中,所有員工都將根據工資降序排列,并分配一個行號。