跳到主要内容

row-number

---
title: ROW_NUMBER
---

为结果集的每个分区中的每行分配一个临时的顺序号,从每个分区的第一行开始编号为1。

## 语法

```sql
ROW_NUMBER()
OVER ( [ PARTITION BY <expr1> [, <expr2> ... ] ]
ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ] )
参数是否必须?描述
ORDER BY指定每个分区内行的顺序。
ASC / DESC指定每个分区内的排序顺序。ASC(升序)是默认值。
QUALIFY基于条件过滤行。

示例

此示例演示了如何使用ROW_NUMBER()为部门内的员工分配顺序号,按薪水降序排列。

-- 准备数据
CREATE TABLE employees (
employee_id INT,
first_name VARCHAR,
last_name VARCHAR,
department VARCHAR,
salary INT
);

INSERT INTO employees (employee_id, first_name, last_name, department, salary) VALUES
(1, 'John', 'Doe', 'IT', 90000),
(2, 'Jane', 'Smith', 'HR', 85000),
(3, 'Mike', 'Johnson', 'IT', 82000),
(4, 'Sara', 'Williams', 'Sales', 77000),
(5, 'Tom', 'Brown', 'HR', 75000);

-- 选择员工详细信息,连同按部门分区并按薪水降序排列的行号。
SELECT
employee_id,
first_name,
last_name,
department,
salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num
FROM
employees;

┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ employee_id │ first_name │ last_name │ department │ salary │ row_num │
├─────────────────┼──────────────────┼──────────────────┼──────────────────┼─────────────────┼─────────┤
2 │ Jane │ Smith │ HR │ 850001
5 │ Tom │ Brown │ HR │ 750002
1 │ John │ Doe │ IT │ 900001
3 │ Mike │ Johnson │ IT │ 820002
4 │ Sara │ Williams │ Sales │ 770001
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
这篇文章对您有帮助吗?
Yes
No
开始使用 Databend Cloud
低成本
快速分析
多种数据源
弹性扩展
注册