ホームページ > データベース > mysql チュートリアル > Oracle で行を効率的に連結およびグループ化するにはどうすればよいですか?

Oracle で行を効率的に連結およびグループ化するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-04 19:06:39
オリジナル
907 人が閲覧しました

How Can I Efficiently Concatenate and Group Rows in Oracle?

Oracle での行の連結とグループ化: 行の操作と集計手法の再考

データ操作と集計の領域で、Oracle は多用途の機能を提供します。大規模なデータセットの効率的な処理を可能にする一連の関数。一般的なタスクの 1 つは、目的の結果を達成するために複数の行を連結およびグループ化することです。

次のシナリオを考えてみましょう: 列 NAME と GROUP_NAME を持つテーブルがあり、行がグループ化される新しいテーブルにデータを変換することを目的としています。 GROUP_NAME に対応する NAME 値が各グループ内で連結されます。

このタスクの 1 つのアプローチは、提供された SQL ステートメントで示されている SYS_CONNECT_BY_PATH 関数。このアプローチでは、各グループ内の行値を接続することによって、連結文字列を繰り返し構築します。

ただし、より高度なシナリオの場合は、LISTAGG 関数が洗練されたソリューションを提供します。 Oracle 11g 以降でサポートされている LISTAGG を使用すると、指定した区切り文字 (カンマなど) で区切って、各グループ内の値を効率的に集計できます。

SELECT group_name,
       LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) "names"
FROM name_table
GROUP BY group_name
ログイン後にコピー

LISTAGG がない以前のバージョンの Oracle の場合は、次のことを検討してください。 ROW_NUMBER や SYS_CONNECT_BY_PATH などの分析関数を利用して行の連結を実現し、

select grp,
    ltrim(max(sys_connect_by_path
       (name, ',' )), ',')
        scbp
  from (select name, grp,
            row_number() over
           (partition by grp
            order by name) rn
         from tab
          )
start with rn = 1
connect by prior rn = rn-1
and prior grp = grp
  group by grp
  order by grp
ログイン後にコピー

これらの手法を検討することで、Oracle で行を効果的に連結およびグループ化し、複雑なデータ操作や集計要件を簡単に処理できるようになります。

以上がOracle で行を効率的に連結およびグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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