row_number()
是一个窗口函数,它在分组查询中起着生成行号的作用。它为查询结果集中的每一行分配一个唯一的数字,这个数字是根据指定的排序顺序递增的。这在处理分组数据时非常有用,因为它可以帮助我们跟踪每个分组中的行号,从而更容易地识别、排序和操作数据。
row_number()
函数的基本语法如下:
row_number() OVER (PARTITION BY column1, column2, ... ORDER BY column1, column2, ...)
其中,PARTITION BY
子句用于指定将结果集分成多个分组的列,ORDER BY
子句用于指定在每个分组内对行进行排序的列。
举个例子,假设我们有一个包含以下数据的 sales
表:
sale_id | product_id | sale_date | amount |
---|---|---|---|
1 | A | 2021-01-01 | 100 |
2 | A | 2021-01-02 | 150 |
3 | B | 2021-01-01 | 200 |
4 | B | 2021-01-02 | 250 |
5 | A | 2021-01-03 | 120 |
如果我们想要查询每个产品的每日销售额,并按日期排序,我们可以使用以下 SQL 查询:
SELECT product_id, sale_date, amount, row_number() OVER (PARTITION BY product_id ORDER BY sale_date) as sale_order FROM sales;
查询结果将如下所示:
product_id | sale_date | amount | sale_order |
---|---|---|---|
A | 2021-01-01 | 100 | 1 |
A | 2021-01-02 | 150 | 2 |
A | 2021-01-03 | 120 | 3 |
B | 2021-01-01 | 200 | 1 |
B | 2021-01-02 | 250 | 2 |
在这个例子中,row_number()
函数根据 product_id
对结果集进行分组,并根据 sale_date
对每个分组进行排序。这样,我们可以很容易地查看每个产品在每天的销售情况,并根据销售顺序进行操作。