ホームページ > データベース > mysql チュートリアル > Oracle には MySQL の「group_concat」と同等の機能がありますか?

Oracle には MySQL の「group_concat」と同等の機能がありますか?

Barbara Streisand
リリース: 2025-01-15 12:36:45
オリジナル
860 人が閲覧しました

Does Oracle Have a Function Equivalent to MySQL's `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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート