MySQL中沒有ROW_NUMBER()這個(gè)函數(shù),您可能是想問窗口函數(shù)ROW_NUMBER()。
ROW_NUMBER()是一個(gè)窗口函數(shù),用于在結(jié)果集中為每一行分配一個(gè)唯一的連續(xù)整數(shù),根據(jù)指定的排序順序。這個(gè)整數(shù)可以作為行號(hào)來使用。
ROW_NUMBER()的基本語法如下:
ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY column1, column2, ...)
參數(shù)說明:
PARTITION BY
:用于將結(jié)果集劃分為多個(gè)分區(qū),每個(gè)分區(qū)內(nèi)的行號(hào)可以重復(fù),不同分區(qū)內(nèi)的行號(hào)不會(huì)重復(fù)。ORDER BY
:用于指定每個(gè)分區(qū)內(nèi)行的排序順序,也可以指定跨分區(qū)的行的排序順序。示例:
假設(shè)有一個(gè)名為employees的表,包含以下列:id、name、salary、department_id?,F(xiàn)在想要查詢每個(gè)部門中薪水最高的員工,可以使用以下SQL語句:
SELECT id, name, salary, department_id
FROM (
SELECT id, name, salary, department_id,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank
FROM employees
) t
WHERE t.rank = 1;
在這個(gè)查詢中,首先使用窗口函數(shù)ROW_NUMBER()為每個(gè)部門的員工分配一個(gè)基于薪水的降序排列的行號(hào)。然后在外層查詢中篩選出每個(gè)部門行號(hào)為1的員工,即每個(gè)部門薪水最高的員工。