Oracle- und MySQL-String-Aggregation: Finden des Äquivalents zu group_concat
Datenbankaufgaben erfordern häufig die Kombination der Daten mehrerer Zeilen zu einer einzigen Zeichenfolge. Die group_concat
-Funktion von MySQL vereinfacht diesen Vorgang. Aber wie erreicht Oracle das gleiche Ergebnis?
Oracle-Lösungen
Oracle bietet mehrere Möglichkeiten, die group_concat
Funktionalität von MySQL zu replizieren:
Für Oracle 11g und spätere Versionen bietet die Funktion LISTAGG
ein direktes Äquivalent:
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS "names" FROM table_x GROUP BY col1</code>
Dadurch werden die col2
-Werte für jede col1
-Gruppe sauber zusammengefasst und durch ', ' getrennt. Die ORDER BY
-Klausel gewährleistet eine konsistente Zeichenfolgenreihenfolge.
Ältere Oracle-Versionen (10g und niedriger) erfordern eine benutzerdefinierte Funktion. Hier ist ein Beispiel:
<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val NUMBER) RETURN VARCHAR2 IS return_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP return_text := return_text || ',' || x.col2 ; END LOOP; RETURN LTRIM(return_text, ','); END; /</code>
Diese Funktion durchläuft Zeilen und hängt Werte an return_text
an. Die Funktion LTRIM
entfernt das führende Komma. Verwendung:
<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
Beachten Sie, dass WM_CONCAT
in einigen älteren Oracle-Versionen vorhanden war, jetzt aber nicht mehr unterstützt wird.
MySQLs group_concat
zum Vergleich
Der Übersichtlichkeit halber hier die MySQL-group_concat
-Syntax:
<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
Dadurch werden die col2
-Werte pro col1
-Gruppe präzise zusammengefasst. Obwohl die explizite Ordnungsfunktion von LISTAGG
fehlt, dient es einem ähnlichen Zweck.
Das obige ist der detaillierte Inhalt vonVerfügt Oracle über eine Funktion, die MySQLs „group_concat' entspricht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!