Heim > Datenbank > MySQL-Tutorial > Wie kann ich Duplikate entfernen, wenn ich die LISTAGG-Funktion von Oracle verwende?

Wie kann ich Duplikate entfernen, wenn ich die LISTAGG-Funktion von Oracle verwende?

Barbara Streisand
Freigeben: 2025-01-19 18:12:11
Original
595 Leute haben es durchsucht

How Can I Remove Duplicates When Using Oracle's LISTAGG Function?

Oracle LISTAGG: Umgang mit doppelten Werten für einzigartige Ergebnisse

Die LISTAGG-Funktion von Oracle ist zwar leistungsstark zum Aggregieren von Daten, entfernt jedoch nicht grundsätzlich doppelte Einträge. Es verkettet alle Werte, einschließlich Wiederholungen, zu einer einzigen Zeichenfolge. So erreichen Sie eine eindeutige Wertaggregation:

Methode für Oracle 19c und höher:

Oracle 19c und spätere Versionen bieten eine vereinfachte Lösung:

<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column)
FROM the_table;</code>
Nach dem Login kopieren

Dadurch wird das Schlüsselwort DISTINCT direkt in die Funktion LISTAGG selbst integriert.

Methode für Oracle 18c und früher:

Für ältere Versionen (18c und niedriger) ist eine Unterabfrage erforderlich:

<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column)
FROM (
  SELECT DISTINCT the_column
  FROM the_table
) t;</code>
Nach dem Login kopieren

Dadurch werden zunächst nur die eindeutigen Werte in einer Unterabfrage ausgewählt und dann LISTAGG auf dieses Ergebnis angewendet.

Einschließlich mehrerer Spalten:

Um zusätzliche Spalten einzuschließen und die Einzigartigkeit zu wahren, ist ein fortgeschrittenerer Ansatz erforderlich:

<code class="language-sql">SELECT col1, LISTAGG(col2, ',') WITHIN GROUP (ORDER BY col2)
FROM (
  SELECT col1, 
         col2,
         ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col1) AS rn
  FROM foo
  ORDER BY col1, col2
)
WHERE rn = 1
GROUP BY col1;</code>
Nach dem Login kopieren

Dabei wird ROW_NUMBER() verwendet, um jeder Kombination aus col1 und col2 einen eindeutigen Rang zuzuweisen. Die äußere Abfrage wählt dann nur das erste Vorkommen (rn = 1) für jede eindeutige Kombination aus und stellt so sicher, dass Duplikate vor der Aggregation eliminiert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Duplikate entfernen, wenn ich die LISTAGG-Funktion von Oracle verwende?. 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