Maison > base de données > tutoriel mysql > Comment puis-je combiner des valeurs de colonne dans une liste séparée par des virgules à l'aide de la clause GROUP BY de SQL ?

Comment puis-je combiner des valeurs de colonne dans une liste séparée par des virgules à l'aide de la clause GROUP BY de SQL ?

Linda Hamilton
Libérer: 2025-01-14 08:07:50
original
1020 Les gens l'ont consulté

How Can I Combine Column Values into a Comma-Separated List Using SQL's GROUP BY Clause?

Agrégation de données avec GROUP BY : création de listes séparées par des virgules

La clause GROUP BY de SQL est puissante pour regrouper des lignes en fonction de valeurs de colonnes partagées et appliquer des fonctions d'agrégation. Une application fréquente consiste à combiner les valeurs d'une seule colonne en une seule chaîne séparée par des virgules pour chaque groupe.

Illustrons avec un exemple de tableau :

<code>ID  User  Activity  PageURL  
1  Me    act1      ab     
2  Me    act1      cd     
3  You   act2      xy     
4  You   act2      st</code>
Copier après la connexion

Notre objectif est de regrouper par User et Activity, en concaténant les valeurs PageURL pour chaque groupe. Le résultat souhaité :

<code>User  Activity  PageURL  
Me    act1      ab, cd     
You   act2      xy, st</code>
Copier après la connexion

Solution SQL Server utilisant STUFF()

Dans SQL Server, nous pouvons y parvenir en utilisant GROUP BY et la fonction STUFF() :

<code class="language-sql">SELECT
    [User], 
    Activity,
    STUFF(
        (SELECT DISTINCT ',' + PageURL
         FROM TableName
         WHERE [User] = a.[User] AND Activity = a.Activity
         FOR XML PATH (''))
        , 1, 1, '') AS URLList
FROM TableName AS a
GROUP BY [User], Activity</code>
Copier après la connexion

Explication :

  • GROUP BY [User], Activity : cela regroupe les lignes en fonction de combinaisons uniques de User et Activity.
  • Sous-requête : L'instruction SELECT interne récupère des valeurs PageURL distinctes pour chaque groupe. Le ',' PageURL ajoute une virgule avant chaque URL.
  • FOR XML PATH('') : Ceci convertit le jeu de résultats en une seule chaîne, concaténant efficacement les URL avec des virgules.
  • STUFF(..., 1, 1, '') : cela supprime la virgule de début ajoutée par la sous-requête, ce qui donne une liste propre, séparée par des virgules.

Conclusion :

Cette approche combine efficacement les valeurs des colonnes dans des listes séparées par des virgules au sein de chaque groupe défini par la clause GROUP BY. Il s'agit d'une technique polyvalente pour la synthèse et la manipulation des données dans SQL Server. Notez que la fonction spécifique de concaténation de chaînes peut varier légèrement en fonction de votre système de base de données (par exemple, GROUP_CONCAT dans MySQL).

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