Oracle 中帶和不帶KEEP 的PARTITION BY
Oracle 中的PARTITION BY 子句允許您將資料表中的行進行分組並執行聚合函數關於這些群體。 KEEP 子句與 PARTITION BY 子句一起使用時,可讓您指定在計算聚合函數時要保留哪些行。
考慮以下兩個查詢:
SELECT empno, deptno, sal, MIN(sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) OVER (PARTITION BY deptno) "Highest" FROM empl SELECT empno, deptno, sal, MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) "Highest" FROM empl
這兩個查詢似乎為了得到相同的結果:他們計算每個部門的最低和最高工資。但是,這兩個查詢之間存在細微差別。
在第一個查詢中,MIN 和 MAX 函數會套用於每個分區中的所有行。在第二個查詢中,KEEP 子句用於指定計算中僅包含每個分區中的第一行和最後一行。
KEEP 子句可以與任何聚合函數一起使用。當您想要尋找一組行中某個值的第一次或最後一次出現時,它特別有用。
例如,以下查詢尋找每個部門中薪水最高的員工的名字和姓氏:
SELECT empno, deptno, sal, MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "First Highest Salary", MAX(name) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS "Last Highest Salary" FROM empl GROUP BY deptno
KEEP 子句也可用於最佳化效能。透過指定僅應將每個分區中的第一行或最後一行包含在計算中,可以減少資料庫需要處理的資料量。這可以提高查詢的效能,特別是在您使用大型資料集時。
以上是Oracle 聚合函數中的「KEEP」子句如何影響「PARTITION BY」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!