ホームページ >データベース >mysql チュートリアル >Oracle には MySQL の「group_concat」と同等の機能がありますか?
Oracle と MySQL の文字列集約: group_concat
データベース タスクでは、多くの場合、複数の行のデータを 1 つの文字列に結合する必要があります。 MySQL の group_concat
関数は、このプロセスを簡素化します。 しかし、Oracle はどのようにして同じ結果を達成するのでしょうか?
オラクルのソリューション
Oracle は、MySQL の group_concat
機能を複製するいくつかの方法を提供しています。
Oracle 11g 以降のバージョンの場合、LISTAGG
関数は直接同等のものを提供します。
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS "names" FROM table_x GROUP BY col1</code>
これは、各 col2
グループの col1
値を「, 」で区切ってきちんと集計します。 ORDER BY
句により、文字列の順序が一貫していることが保証されます。
Oracle の古いバージョン (10g 以下) にはカスタム関数が必要です。 以下に例を示します:
<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>
この関数は行を反復処理し、値を return_text
に追加します。 LTRIM
関数は先頭のカンマを削除します。 使用法:
<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
WM_CONCAT
は一部の古い Oracle バージョンには存在していましたが、現在はサポートされていないことに注意してください。
比較用の MySQL の group_concat
わかりやすくするために、MySQL group_concat
構文を次に示します。
<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
これは、col2
グループごとに col1
値を簡潔に集計します。 LISTAGG
の明示的な順序付け機能はありませんが、同様の目的を果たします。
以上がOracle には MySQL の「group_concat」と同等の機能がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。