Maison > base de données > tutoriel mysql > Comment différentes bases de données SQL implémentent-elles l'agrégation de chaînes (LISTAGG) ?

Comment différentes bases de données SQL implémentent-elles l'agrégation de chaînes (LISTAGG) ?

Susan Sarandon
Libérer: 2025-01-22 13:06:10
original
527 Les gens l'ont consulté

How Do Different SQL Databases Implement String Aggregation (LISTAGG)?

Agrégation de chaînes dans diverses bases de données SQL

Cet article montre comment concaténer plusieurs valeurs de chaîne en une seule chaîne à l'aide de différentes bases de données SQL. Le but est d'agréger un champ de chaîne.

Oracle et DB2 :

Oracle et DB2 offrent tous deux la fonction LISTAGG intégrée. La syntaxe est simple :

<code class="language-sql">SELECT FieldA,
       LISTAGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;</code>
Copier après la connexion

PostgreSQL :

PostgreSQL utilise la fonction STRING_AGG :

<code class="language-sql">SELECT FieldA,
       STRING_AGG(FieldB, ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;</code>
Copier après la connexion

SQL Serveur :

SQL Server 2017 et versions ultérieures prennent également en charge STRING_AGG. Pour les anciennes versions (avant 2017), une approche plus complexe utilisant STUFF et FOR XML PATH est nécessaire :

<code class="language-sql">WITH CTE_TableName AS (
    SELECT FieldA, FieldB
    FROM TableName
)
SELECT t0.FieldA,
       STUFF((
           SELECT ',' + t1.FieldB
           FROM CTE_TableName t1
           WHERE t1.FieldA = t0.FieldA
           ORDER BY t1.FieldB
           FOR XML PATH('')
       ), 1, LEN(','), '') AS FieldBs
FROM CTE_TableName t0
GROUP BY t0.FieldA
ORDER BY FieldA;</code>
Copier après la connexion

SQLite :

La fonction GROUP_CONCAT de SQLite peut effectuer une agrégation de chaînes. La commande nécessite un CTE ou une sous-requête :

Avec commande :

<code class="language-sql">WITH CTE_TableName AS (
    SELECT FieldA, FieldB
    FROM TableName
    ORDER BY FieldA, FieldB
)
SELECT FieldA,
       GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM CTE_TableName
GROUP BY FieldA
ORDER BY FieldA;</code>
Copier après la connexion

Sans commande :

<code class="language-sql">SELECT FieldA,
       GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;</code>
Copier après la connexion

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