Maison >base de données >tutoriel mysql >Comment puis-je garantir des valeurs distinctes lors de l'utilisation de la fonction LISTAGG d'Oracle ?

Comment puis-je garantir des valeurs distinctes lors de l'utilisation de la fonction LISTAGG d'Oracle ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-19 18:26:09125parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn