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 サイトの他の関連記事を参照してください。