Oracle LISTAGG: 一意の値の抽出
Oracle の LISTAGG 関数は強力ですが、列内で一意の値を取得する場合に課題が生じる可能性があります。 この記事では、追加の機能や手順を必要としない効率的なソリューションの概要を説明します。
Oracle 19c 以降:
Oracle 19c 以降のバージョンでは、合理化されたアプローチが提供されます。
<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM the_table;</code>
これは個別の値を直接集計し、簡潔で効果的な方法を提供します。
Oracle 18c 以前:
古い Oracle バージョンの場合は、サブクエリが必要です。
<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM ( SELECT DISTINCT the_column FROM the_table ) t;</code>
これにより、LISTAGG が適用される前に、個別の値のみを含む一時テーブル (t
) が作成されます。
複数の列の処理:
一意の LISTAGG 値と一緒に追加の列を含めるには、次のクエリを利用します。
<code class="language-sql">SELECT col1, LISTAGG(col2, ',') WITHIN GROUP (ORDER BY col2) FROM ( SELECT col1, col2, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col1) AS rn FROM foo ORDER BY col1, col2 ) WHERE rn = 1 GROUP BY col1;</code>
これにより、各一意の col2
値が対応する col1
値と正しくペアリングされ、より完全な結果セットが提供されます。
以上がOracle の LISTAGG 関数を使用して個別の値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。