Oracle で LISTAGG 関数を使用して一意の値を取得する
Oracle の LISTAGG 関数は、指定された列の値を結合できます。ただし、この関数は、一意でない列から値を取得するときに重複した結果を生成する可能性があります。
質問:
関数やプロシージャを使用せずに列から一意の値のみを取得したい場合は、LISTAGG 関数を使用します。たとえば、次の表を考えてみましょう:
col1 | col2 |
---|---|
1 | 2 |
1 | 2 |
1 | 3 |
1 | 4 |
1 | 5 |
LISTAGG をcol2 に適用すると、次の結果が得られる可能性があります: [2,2,3,4,5]。目標は、重複する 2 を排除し、一意の値のみを表示することです。
解決策:
19 時以降:
<code class="language-sql">select listagg(distinct col2, ',') within group (order by col2) from the_table;</code>
18 時以前:
<code class="language-sql">select listagg(col2, ',') within group (order by col2) from ( select distinct col2 from the_table ) t;</code>
これらのクエリでは、LISTAGG 関数で DISTINCT キーワードを使用して、一意の値のみが含まれるようにします。
追加の列:
一意の値とともに複数の列を取得する必要がある場合は、次の手順を実行できます:
<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>
このクエリは、col1 とcol2 の各組み合わせに一意の行番号を割り当て、col1 グループごとに最初の行を選択します。
以上がOracle の LISTAGG 関数を使用して個別の値のみを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。