Oracle LISTAGG : Extraction de valeurs uniques
La fonction Oracle LISTAGG, bien que puissante, peut présenter des défis lorsque l'on vise des valeurs uniques dans une colonne. Cet article présente des solutions efficaces sans avoir besoin de fonctions ou de procédures supplémentaires.
Oracle 19c et supérieur :
Oracle 19c et versions ultérieures offrent une approche simplifiée :
<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM the_table;</code>
Cela regroupe directement des valeurs distinctes, offrant une méthode concise et efficace.
Oracle 18c et versions antérieures :
Pour les anciennes versions d'Oracle, une sous-requête est nécessaire :
<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM ( SELECT DISTINCT the_column FROM the_table ) t;</code>
Cela crée une table temporaire (t
) contenant uniquement des valeurs distinctes avant l'application de LISTAGG.
Gestion de plusieurs colonnes :
Pour inclure des colonnes supplémentaires aux côtés des valeurs LISTAGG uniques, utilisez cette requête :
<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>
Cela garantit que chaque valeur col2
unique est correctement associée à sa valeur col1
correspondante, fournissant ainsi un ensemble de résultats plus complet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!