PARTITION BY mit und ohne KEEP in Oracle
Mit der PARTITION BY-Klausel in Oracle können Sie Zeilen in einer Tabelle gruppieren und Aggregatfunktionen ausführen auf diese Gruppen. Mit der KEEP-Klausel können Sie bei Verwendung mit der PARTITION BY-Klausel angeben, welche Zeilen bei der Berechnung der Aggregatfunktion beibehalten werden sollen.
Betrachten Sie die folgenden zwei Abfragen:
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
Beide Abfragen scheinen um zum gleichen Ergebnis zu kommen: Sie berechnen die niedrigsten und höchsten Gehälter für jede Abteilung. Es gibt jedoch einen subtilen Unterschied zwischen den beiden Abfragen.
In der ersten Abfrage werden die MIN- und MAX-Funktionen auf alle Zeilen in jeder Partition angewendet. In der zweiten Abfrage wird die KEEP-Klausel verwendet, um anzugeben, dass nur die erste und letzte Zeile in jeder Partition in die Berechnung einbezogen werden sollen.
Die KEEP-Klausel kann mit jeder Aggregatfunktion verwendet werden. Dies ist besonders nützlich, wenn Sie das erste oder letzte Vorkommen eines Werts in einer Reihe von Zeilen finden möchten.
Beispielsweise findet die folgende Abfrage die Vor- und Nachnamen der Mitarbeiter mit den höchsten Gehältern in jeder Abteilung :
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
Die KEEP-Klausel kann auch zur Leistungsoptimierung verwendet werden. Indem Sie festlegen, dass nur die ersten oder letzten Zeilen in jeder Partition in die Berechnung einbezogen werden sollen, können Sie die Datenmenge reduzieren, die die Datenbank verarbeiten muss. Dies kann die Leistung Ihrer Abfrage verbessern, insbesondere wenn Sie mit einem großen Datensatz arbeiten.
Das obige ist der detaillierte Inhalt vonWie wirkt sich die „KEEP'-Klausel auf „PARTITION BY' in Oracle Aggregate Functions aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!