sql row_number()函數(shù)用法

sql
小樊
83
2024-10-19 15:21:01
欄目: 云計(jì)算

ROW_NUMBER()是SQL Server中的一個(gè)窗口函數(shù),它在結(jié)果集中為每一行分配一個(gè)唯一的連續(xù)整數(shù),根據(jù)指定的排序順序。這個(gè)函數(shù)在分析數(shù)據(jù)時(shí)非常有用,特別是當(dāng)你需要知道數(shù)據(jù)在某個(gè)排序范圍內(nèi)的位置時(shí)。

ROW_NUMBER()函數(shù)的基本語(yǔ)法如下:

ROW_NUMBER() OVER (ORDER BY column1, column2, ...)
  • OVER子句用于指定排序的列和順序。你可以指定一個(gè)或多個(gè)列來(lái)定義排序順序。
  • 如果沒(méi)有指定OVER子句中的列,那么ROW_NUMBER()將使用查詢結(jié)果集內(nèi)部的行號(hào)進(jìn)行排序(從1開始)。

下面是一個(gè)簡(jiǎn)單的例子,演示了如何使用ROW_NUMBER()函數(shù):

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    DepartmentID INT,
    Salary DECIMAL(10, 2)
);

INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID, Salary)
VALUES (1, N'John', N'Doe', 1, 50000.00),
       (2, N'Jane', N'Smith', 2, 60000.00),
       (3, N'Jim', N'Brown', 1, 55000.00),
       (4, N'Jake', N'Johnson', 3, 70000.00);

SELECT 
    ROW_NUMBER() OVER (PARTITION BY DepartmentID ORDER BY Salary DESC) AS RowNum,
    EmployeeID,
    FirstName,
    LastName,
    DepartmentID,
    Salary
FROM Employees;

在這個(gè)例子中,我們首先創(chuàng)建了一個(gè)名為Employees的表,并插入了一些數(shù)據(jù)。然后,我們使用ROW_NUMBER()函數(shù)為每個(gè)部門的員工分配一個(gè)行號(hào),排序依據(jù)是薪水降序。PARTITION BY子句用于將結(jié)果集劃分為多個(gè)分區(qū),每個(gè)分區(qū)內(nèi)的行號(hào)會(huì)重新從1開始計(jì)數(shù)。在這個(gè)例子中,我們按照DepartmentID進(jìn)行了分區(qū)。

0