ホームページ >データベース >mysql チュートリアル >Oracle の LISTAGG 関数を使用して個別の値を取得するにはどうすればよいですか?

Oracle の LISTAGG 関数を使用して個別の値を取得するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-19 18:06:13186ブラウズ

How Can I Get Distinct Values Using Oracle's LISTAGG Function?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。