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
對每個分組進行排序。這樣,我們可以很容易地查看每個產品在每天的銷售情況,并根據銷售順序進行操作。