📅  最后修改于: 2023-12-03 15:03:23.955000             🧑  作者: Mango
有时候,我们需要为每个分组分配唯一的编号。在Oracle SQL中,可以使用ROW_NUMBER()函数来实现。
ROW_NUMBER()是Oracle SQL中的一个窗口函数,用于为每行数据分配唯一的序号。
该函数的语法如下:
ROW_NUMBER() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
其中,PARTITION BY 子句用于指定分组字段,sort_expression则用于指定排序字段。
例如,对于以下的订单表:
CREATE TABLE orders (
order_id INT,
customer_id INT,
order_date DATE,
amount NUMBER
);
INSERT INTO orders (order_id, customer_id, order_date, amount)
VALUES (1, 1, TO_DATE('2022/05/01', 'yyyy/mm/dd'), 100),
(2, 1, TO_DATE('2022/05/05', 'yyyy/mm/dd'), 200),
(3, 2, TO_DATE('2022/05/10', 'yyyy/mm/dd'), 300),
(4, 2, TO_DATE('2022/05/15', 'yyyy/mm/dd'), 400),
(5, 3, TO_DATE('2022/05/20', 'yyyy/mm/dd'), 500),
(6, 3, TO_DATE('2022/05/25', 'yyyy/mm/dd'), 600);
我们需要为每个客户的订单分配唯一的序号。可以使用以下的SQL语句实现:
SELECT
order_id,
customer_id,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS seq
FROM
orders;
运行结果为:
| order_id | customer_id | seq | |----------|-------------|------| | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 2 | 1 | | 4 | 2 | 2 | | 5 | 3 | 1 | | 6 | 3 | 2 |
# Oracle SQL 为每个分组分配唯一编号 - SQL
有时候,我们需要为每个分组分配唯一的编号。在Oracle SQL中,可以使用ROW_NUMBER()函数来实现。
## ROW_NUMBER() 函数
ROW_NUMBER()是Oracle SQL中的一个窗口函数,用于为每行数据分配唯一的序号。
该函数的语法如下:
```sql
ROW_NUMBER() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
其中,PARTITION BY 子句用于指定分组字段,sort_expression则用于指定排序字段。
例如,对于以下的订单表:
CREATE TABLE orders (
order_id INT,
customer_id INT,
order_date DATE,
amount NUMBER
);
INSERT INTO orders (order_id, customer_id, order_date, amount)
VALUES (1, 1, TO_DATE('2022/05/01', 'yyyy/mm/dd'), 100),
(2, 1, TO_DATE('2022/05/05', 'yyyy/mm/dd'), 200),
(3, 2, TO_DATE('2022/05/10', 'yyyy/mm/dd'), 300),
(4, 2, TO_DATE('2022/05/15', 'yyyy/mm/dd'), 400),
(5, 3, TO_DATE('2022/05/20', 'yyyy/mm/dd'), 500),
(6, 3, TO_DATE('2022/05/25', 'yyyy/mm/dd'), 600);
我们需要为每个客户的订单分配唯一的序号。可以使用以下的SQL语句实现:
SELECT
order_id,
customer_id,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS seq
FROM
orders;
运行结果为:
| order_id | customer_id | seq | |----------|-------------|------| | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 2 | 1 | | 4 | 2 | 2 | | 5 | 3 | 1 | | 6 | 3 | 2 |