在 Oracle 中,
PARTITION BY
子句用於分析函數中,用來將結果集劃分成不同的分區。這些分區由PARTITION BY
子句指定的一組列定義,每個分區內的計算是獨立進行的。這在進行累積計算、排名、移動平均等操作時非常有用。
使用PARTITION BY 進行排名
sale_id
:銷售IDsalesman_id
:業務員IDamount
:銷售金額sale_date
:銷售日期
SELECT
sale_id,
salesman_id,
amount,
RANK() OVER (PARTITION BY salesman_id ORDER BY amount DESC) AS rank
FROM
sales;
這會根據條近 salesman_id 進行分類 並且透過 order by 的 amount 進行排序給定對應的值 ( 從 1開始~)
使用 PARTITION BY 計算累計總和
SELECT
sale_id,
salesman_id,
amount,
SUM(amount) OVER (PARTITION BY salesman_id ORDER BY sale_date) AS cumulative_amount
FROM
sales;
這個查詢會根據 salesman_id
將資料劃分成不同的分區,並在每個分區內根據 sale_date
計算銷售金額的累計總和。
使用 PARTITION BY 計算移動平均
SELECT
sale_id,
salesman_id,
amount,
AVG(amount) OVER (PARTITION BY salesman_id ORDER BY sale_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_average
FROM
sales;
這個查詢會根據 salesman_id
將資料劃分成不同的分區,並在每個分區內計算移動平均值,範圍是當前行及前兩行的數值。
參考連結 : link