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