首頁 > 資料庫 > mysql教程 > Oracle 的「PARTITION BY」子句在使用和不使用「KEEP」時有何不同?

Oracle 的「PARTITION BY」子句在使用和不使用「KEEP」時有何不同?

Susan Sarandon
發布: 2024-12-21 00:45:10
原創
752 人瀏覽過

How Does Oracle's `PARTITION BY` Clause Differ with and without `KEEP`?

Oracle 中帶和不帶KEEP 的PARTITION BY

簡介

簡介在

簡介

,PARTITION BY子句用於將一組資料劃分為子集以進行聚合計算。 KEEP 子句指定每個分區保留哪些行。本文討論使用有和沒有 KEEP 的 PARTITION BY 之間的差異。

帶和不帶KEEP 的查詢

考慮以下兩個查詢:

第一個查詢使用PARTITION BY 而不使用KEEP,而第二個查詢使用KEEP (DENSE_RANK)。這兩個查詢都會計算每個部門的最低和最高工資。

KEEP (DENSE_RANK FIRST ORDER BY sal)

在第二個查詢中,KEEP (DENSE_RANK FIRST ORDER BY sal) 子句指示Oracle 在按工資子句指示Oracle行進行排序後僅保留每個部門的第一行命令。 DENSE_RANK 函數為每個分區中的每一行分配一個排名,第一個排名表示最低工資。

查詢之間的差異

第二個查詢是多餘的,因為MIN 和 DENSE_RANK FIRST 都在同一個 sal 列上運行。它們將產生與第一個查詢相同的結果,直接計算最低工資,而不使用 KEEP。

這是因為 KEEP (DENSE_RANK FIRST ORDER BY sal) 子句僅在 MIN 或 MAX 聚合時有用在與排序列不同的列上執行。在這種情況下,KEEP 子句允許對計算中包含哪些行進行更具體的控制。

範例考慮以下查詢:此查詢計算每個部門的最低工資,以及工資最低的員工的姓名。在這種情況下,KEEP (DENSE_RANK FIRST ORDER BY sal) 子句是必要的,因為它確保只返回最低工資和相應的員工姓名,即使有多行具有相同的最低工資。

以上是Oracle 的「PARTITION BY」子句在使用和不使用「KEEP」時有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板