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>
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>
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>
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>
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!