Maison > base de données > tutoriel mysql > Oracle a-t-il une fonction équivalente au « group_concat » de MySQL ?

Oracle a-t-il une fonction équivalente au « group_concat » de MySQL ?

Barbara Streisand
Libérer: 2025-01-15 12:36:45
original
860 Les gens l'ont consulté

Does Oracle Have a Function Equivalent to MySQL's `group_concat`?

Agrégation de chaînes Oracle et MySQL : trouver l'équivalent de group_concat

Les tâches de base de données nécessitent souvent de combiner les données de plusieurs lignes en une seule chaîne. La fonction group_concat de MySQL simplifie ce processus. Mais comment Oracle parvient-il au même résultat ?

Solutions d'Oracle

Oracle propose plusieurs façons de répliquer la group_concat fonctionnalité de MySQL :

Pour Oracle 11g et versions ultérieures, la fonction LISTAGG fournit un équivalent direct :

<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS "names"
FROM table_x
GROUP BY col1</code>
Copier après la connexion

Cela regroupe soigneusement les valeurs col2 pour chaque col1 groupe, en les séparant par ', '. La clause ORDER BY garantit un ordre cohérent des chaînes.

Les anciennes versions d'Oracle (10g et inférieures) nécessitent une fonction personnalisée. Voici un exemple :

<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val NUMBER)
RETURN VARCHAR2
IS
  return_text VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    return_text := return_text || ',' || x.col2 ;
  END LOOP;
  RETURN LTRIM(return_text, ',');
END;
/</code>
Copier après la connexion

Cette fonction parcourt les lignes, en ajoutant des valeurs à return_text. La fonction LTRIM supprime la virgule de début. Utilisation :

<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
Copier après la connexion

Notez que WM_CONCAT existait dans certaines anciennes versions d'Oracle mais n'est désormais plus pris en charge.

MySQL group_concat pour comparaison

Pour plus de clarté, voici la syntaxe MySQL group_concat :

<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
Copier après la connexion

Cela regroupe de manière concise les col2 valeurs par col1 groupe. Bien qu'il ne dispose pas de la capacité de commande explicite de LISTAGG, il sert un objectif similaire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal