Maison >base de données >tutoriel mysql >Comment puis-je garantir des valeurs distinctes lors de l'utilisation de la fonction LISTAGG d'Oracle ?
Oracle LISTAGG : Générer des chaînes avec des valeurs uniques
La fonction LISTAGG
d'Oracle est inestimable pour concaténer les valeurs de colonnes en une seule chaîne. Cependant, obtenir uniquement des valeurs distinctes au sein de la chaîne agrégée nécessite une approche spécifique. Ce guide présente des méthodes efficaces, évitant le besoin de fonctions personnalisées ou de procédures stockées.
Oracle 19c et versions ultérieures : exploiter directement DISTINCT
Pour Oracle 19c et les versions ultérieures, le mot-clé DISTINCT
peut être intégré de manière transparente dans la fonction LISTAGG
elle-même :
<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM the_table;</code>
Oracle 18c et versions antérieures : utilisation d'une sous-requête
Dans les anciennes versions d'Oracle (18c et antérieures), une sous-requête est nécessaire pour filtrer les valeurs uniques avant l'agrégation :
<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM ( SELECT DISTINCT the_column FROM the_table ) t;</code>
Incorporer plusieurs colonnes
La requête suivante étend la fonctionnalité pour inclure plusieurs colonnes, démontrant une méthode robuste pour des scénarios plus complexes :
<code class="language-sql">SELECT DISTINCT col1, listagg(col2, ',') OVER (PARTITION BY col1 ORDER BY col2) AS col2_list FROM table_name WHERE RN = 1 GROUP BY col1 ORDER BY col1;</code>
En conclusion, en utilisant soit le mot-clé DISTINCT
(19c et supérieur) ou une sous-requête (18c et inférieur), vous pouvez générer efficacement des résultats LISTAGG
contenant uniquement des valeurs uniques. Ces techniques offrent une flexibilité entre différentes versions d'Oracle et facilitent l'inclusion de plusieurs colonnes si nécessaire.
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!