Utilisation de la fonction LISTAGG dans Oracle pour récupérer des valeurs uniques
La fonction LISTAGG d'Oracle peut joindre les valeurs dans les colonnes spécifiées. Cependant, cette fonction peut produire des résultats en double lors de la récupération de valeurs de colonnes non uniques.
Question :
Utilisez la fonction LISTAGG lorsque vous souhaitez récupérer uniquement les valeurs uniques d'une colonne sans avoir à utiliser une fonction ou une procédure. Par exemple, considérons le tableau suivant :
col1 | col2 |
---|---|
1 | 2 |
1 | 2 |
1 | 3 |
1 | 4 |
1 | 5 |
Lorsque vous appliquez LISTAGG à col2, vous pouvez obtenir le résultat suivant : [2,2,3,4,5]. L'objectif est d'éliminer les 2 en double et d'afficher uniquement les valeurs uniques.
Solution :
19c et plus :
<code class="language-sql">select listagg(distinct col2, ',') within group (order by col2) from the_table;</code>
18c et avant :
<code class="language-sql">select listagg(col2, ',') within group (order by col2) from ( select distinct col2 from the_table ) t;</code>
Ces requêtes utilisent le mot-clé DISTINCT dans la fonction LISTAGG pour garantir que seules les valeurs uniques sont incluses.
Colonnes supplémentaires :
Si vous devez récupérer plusieurs colonnes avec des valeurs uniques, vous pouvez procéder comme suit :
<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>
Cette requête attribue un numéro de ligne unique à chaque combinaison de col1 et col2, puis sélectionne la première ligne pour chaque groupe col1.
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!