Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit der LISTAGG-Funktion von Oracle eindeutige Werte erhalten?
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!