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>
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>
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>
Explication :
GROUP BY [User], Activity
: cela regroupe les lignes en fonction de combinaisons uniques de User
et Activity
.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!