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

Comment puis-je obtenir des valeurs distinctes à l'aide de la fonction LISTAGG d'Oracle ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-19 18:06:13231parcourir

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

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!

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