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

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

Patricia Arquette
Patricia ArquetteOriginal
2025-01-19 18:21:09693Durchsuche

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

Verwenden der LISTAGG-Funktion in Oracle zum Abrufen eindeutiger Werte

Die LISTAGG-Funktion von Oracle kann die Werte in den angegebenen Spalten verbinden. Diese Funktion kann jedoch beim Abrufen von Werten aus nicht eindeutigen Spalten zu doppelten Ergebnissen führen.

Frage:

Verwenden Sie die LISTAGG-Funktion, wenn Sie nur eindeutige Werte aus einer Spalte abrufen möchten, ohne eine Funktion oder Prozedur verwenden zu müssen. Betrachten Sie beispielsweise die folgende Tabelle:

col1 col2
1 2
1 2
1 3
1 4
1 5

Wenn Sie LISTAGG auf Spalte2 anwenden, erhalten Sie möglicherweise das folgende Ergebnis: [2,2,3,4,5]. Das Ziel besteht darin, doppelte 2 zu eliminieren und nur eindeutige Werte anzuzeigen.

Lösung:

19c und höher:

<code class="language-sql">select listagg(distinct col2, ',') within group (order by col2)
from the_table;</code>

18c und früher:

<code class="language-sql">select listagg(col2, ',') within group (order by col2)
from (
   select distinct col2 
   from the_table
) t;</code>

Diese Abfragen verwenden das Schlüsselwort DISTINCT in der LISTAGG-Funktion, um sicherzustellen, dass nur eindeutige Werte enthalten sind.

Zusätzliche Spalten:

Wenn Sie mehrere Spalten zusammen mit eindeutigen Werten abrufen müssen, können Sie Folgendes tun:

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

Diese Abfrage weist jeder Kombination aus Spalte1 und Spalte2 eine eindeutige Zeilennummer zu und wählt dann die erste Zeile für jede Spalte1-Gruppe aus.

Das obige ist der detaillierte Inhalt vonWie kann ich mit der LISTAGG-Funktion von Oracle nur eindeutige Werte abrufen?. 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