📜  oracle sql 为每个分组分配唯一编号 - SQL (1)

📅  最后修改于: 2023-12-03 15:03:23.955000             🧑  作者: Mango

Oracle SQL 为每个分组分配唯一编号 - SQL

有时候,我们需要为每个分组分配唯一的编号。在Oracle SQL中,可以使用ROW_NUMBER()函数来实现。

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 |

Markdown 返回的代码片段
# 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 |