Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit der LISTAGG-Funktion von Oracle eindeutige Werte erhalten?

Wie kann ich mit der LISTAGG-Funktion von Oracle eindeutige Werte erhalten?

Susan Sarandon
Susan SarandonOriginal
2025-01-19 18:06:13185Durchsuche

How Can I Get Distinct Values Using Oracle's LISTAGG Function?

Oracle LISTAGG: Eindeutige Werte extrahieren

Die Oracle LISTAGG-Funktion ist zwar leistungsstark, kann jedoch beim Streben nach eindeutigen Werten innerhalb einer Spalte eine Herausforderung darstellen. Dieser Artikel beschreibt effiziente Lösungen, ohne dass zusätzliche Funktionen oder Verfahren erforderlich sind.

Oracle 19c und höher:

Oracle 19c und spätere Versionen bieten einen optimierten Ansatz:

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

Dadurch werden unterschiedliche Werte direkt aggregiert und so eine prägnante und effektive Methode bereitgestellt.

Oracle 18c und früher:

Für ältere Oracle-Versionen ist eine Unterabfrage notwendig:

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

Dadurch wird eine temporäre Tabelle (t) erstellt, die nur eindeutige Werte enthält, bevor LISTAGG angewendet wird.

Umgang mit mehreren Spalten:

Um neben den eindeutigen LISTAGG-Werten zusätzliche Spalten einzuschließen, verwenden Sie diese Abfrage:

<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>

Dadurch wird sichergestellt, dass jeder eindeutige col2-Wert korrekt mit dem entsprechenden col1-Wert gepaart wird, wodurch ein vollständigerer Ergebnissatz bereitgestellt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich mit der LISTAGG-Funktion von Oracle eindeutige Werte erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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