row_number()
是一個(gè)窗口函數(shù),它在分組查詢中起著生成行號(hào)的作用。它為查詢結(jié)果集中的每一行分配一個(gè)唯一的數(shù)字,這個(gè)數(shù)字是根據(jù)指定的排序順序遞增的。這在處理分組數(shù)據(jù)時(shí)非常有用,因?yàn)樗梢詭椭覀兏櫭總€(gè)分組中的行號(hào),從而更容易地識(shí)別、排序和操作數(shù)據(jù)。
row_number()
函數(shù)的基本語法如下:
row_number() OVER (PARTITION BY column1, column2, ... ORDER BY column1, column2, ...)
其中,PARTITION BY
子句用于指定將結(jié)果集分成多個(gè)分組的列,ORDER BY
子句用于指定在每個(gè)分組內(nèi)對(duì)行進(jìn)行排序的列。
舉個(gè)例子,假設(shè)我們有一個(gè)包含以下數(shù)據(jù)的 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 |
如果我們想要查詢每個(gè)產(chǎn)品的每日銷售額,并按日期排序,我們可以使用以下 SQL 查詢:
SELECT product_id, sale_date, amount,
row_number() OVER (PARTITION BY product_id ORDER BY sale_date) as sale_order
FROM sales;
查詢結(jié)果將如下所示:
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 |
在這個(gè)例子中,row_number()
函數(shù)根據(jù) product_id
對(duì)結(jié)果集進(jìn)行分組,并根據(jù) sale_date
對(duì)每個(gè)分組進(jìn)行排序。這樣,我們可以很容易地查看每個(gè)產(chǎn)品在每天的銷售情況,并根據(jù)銷售順序進(jìn)行操作。