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

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

Mary-Kate Olsen
Freigeben: 2024-12-21 09:35:10
Original
314 Leute haben es durchsucht

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

PARTITION BY mit und ohne KEEP in Oracle

Mit der PARTITION BY-Klausel in Oracle können Benutzer Zeilen in einer Tabelle basierend auf angegebenen Spalten gruppieren für Aggregatberechnungen. In einigen Fällen kann die KEEP-Klausel in Verbindung mit PARTITION BY verwendet werden, um die Beibehaltung einzelner Zeilen innerhalb jeder Partition zu steuern.

Syntax mit KEEP:

MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
Nach dem Login kopieren

In dieser Syntax folgt auf die KEEP-Klausel DENSE_RANK FIRST, was angibt, dass die Zeile mit dem niedrigsten Gehalt in jeder Partition beibehalten werden soll. DENSE_RANK gewährleistet eine kontinuierliche Rangfolge, was bedeutet, dass Zeilen mit identischen Gehältern die gleiche Rangfolge haben.

Syntax ohne KEEP:

MIN(sal) OVER (PARTITION BY deptno)
Nach dem Login kopieren

In dieser Syntax wird die KEEP-Klausel weggelassen . Ohne KEEP werden alle Zeilen innerhalb jeder Partition für die Aggregatberechnung berücksichtigt, was dazu führen kann, dass mehrere Zeilen mit identischen Werten im Ergebnis enthalten sind.

Unterschied:

Der Hauptunterschied zwischen den beiden Abfragen besteht darin:

  • Mit KEEP:Nur ​​die Zeile mit dem niedrigsten Gehalt innerhalb jeder Abteilung wird in das Ergebnis einbezogen.
  • Ohne KEEP: Alle Zeilen innerhalb jeder Abteilung werden in das Ergebnis einbezogen, was möglicherweise zu doppelten Mindestgehaltswerten führt.

Redundantes KEEP:

Im bereitgestellten Beispiel ist die KEEP-Klausel redundant, da auch die MIN-Funktion angewendet wird zur gleichen Spalte (sal). Daher ist die Zeile mit der ersten Rangfolge basierend auf dem Gehalt immer diejenige mit dem niedrigsten Gehalt.

Beispiel mit einer anderen Sortierspalte:

Wenn jedoch eine andere Wird die Bestellspalte für die KEEP-Klausel verwendet, kann sie einen anderen Effekt haben:

MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY name) OVER (PARTITION BY deptno)
Nach dem Login kopieren

In diesem Fall die Zeile mit dem niedrigsten Gehalt unter denen mit dem gleichen Die Reihenfolge (Name) wird in jeder Partition beibehalten. Dadurch können Benutzer das niedrigste Gehalt für Mitarbeiter mit bestimmten Namen innerhalb jeder Abteilung auswählen.

Das obige ist der detaillierte Inhalt vonWie wirkt sich die „KEEP'-Klausel auf die Aggregatfunktionen „PARTITION BY' in Oracle 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