Oracle 中帶和不帶KEEP 的PARTITION BY
Oracle 中的PARTITION BY 子句允許使用者根據指定的列對表中的PARTITION的行進行分組用於匯總計算。在某些情況下,KEEP 子句可以與 PARTITION BY 結合使用來控制每個分區中各個行的保留。
KEEP 的語法:
MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
在此語法中,KEEP 子句後面是 DENSE_RANK FIRST,表示工資最低的行應保留在每個 分割。 DENSE_RANK 確保連續排名,這意味著具有相同薪水的行將具有相同的排名。
不含 KEEP 的語法:
MIN(sal) OVER (PARTITION BY deptno)
在此語法中,省略了 KEEP 子句。如果沒有 KEEP,則聚合計算時會考慮每個分區中的所有行,這可能會導致結果中包含具有相同值的多行。
差異:
兩個查詢的主要差異在於:
冗餘KEEP:
在提供的例如,KEEP 子句是多餘的,因為 MIN 函數也應用於同一列 (sal)。因此,根據工資排名第一的行始終是工資最低的行。
具有不同排序列的範例:
但是,如果不同排序列用於KEEP 子句,它可以產生不同的效果:
MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY name) OVER (PARTITION BY deptno)
在這種情況下,帶有每個分區中將保留具有相同順序(姓名)的最低工資。這允許使用者為每個部門內具有特定姓名的員工選擇最低工資。
以上是Oracle 中的「KEEP」子句如何影響「PARTITION BY」聚合函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!