Heim > Datenbank > MySQL-Tutorial > Wie wirkt sich die „KEEP'-Klausel auf „PARTITION BY' in Oracle Aggregate Functions aus?

Wie wirkt sich die „KEEP'-Klausel auf „PARTITION BY' in Oracle Aggregate Functions aus?

Linda Hamilton
Freigeben: 2024-12-29 21:06:21
Original
382 Leute haben es durchsucht

How Does the `KEEP` Clause Affect `PARTITION BY` in Oracle Aggregate Functions?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage