Utilisez MaxCompute SQL pour fusionner les valeurs de plusieurs lignes en une seule. Deux approches couvrent la majorité des cas d'usage :
Concaténation de chaînes : utilisez
wm_concatpour regrouper les valeurs de plusieurs lignes en une seule chaîne séparée par des virgules, selon un regroupement défini par une colonne.Agrégation conditionnelle : combinez
CASE WHENavecSUMafin de compter ou d'additionner des valeurs par catégorie sur plusieurs lignes. Il s'agit de l'approche SQL standard pour transformer un tableau étroit en tableau large.
Données d'exemple
Les exemples de cette rubrique s'appuient sur une table nommée students :
| class | gender | name |
|---|---|---|
| 1 | M | LiLei |
| 1 | F | HanMM |
| 1 | M | Jim |
| 1 | F | HanMM |
| 2 | F | Kate |
| 2 | M | Peter |
Concaténer les valeurs de lignes dans une chaîne
La fonction wm_concat agrège les valeurs de plusieurs lignes en une seule chaîne, avec un regroupement par colonne.
Syntaxe :
wm_concat([DISTINCT] '<delimiter>', <column>)
| Paramètre | Obligatoire | Description |
|---|---|---|
DISTINCT |
Non | Supprime les doublons avant la concaténation. |
<delimiter> |
Oui | Chaîne de séparation insérée entre les valeurs concaténées. |
<column> |
Oui | Colonne dont les valeurs sont concaténées. |
Pour consulter la référence complète de la fonction, reportez-vous à la documentation Fonctions d'agrégation.
Concaténation de base
Regroupez les noms par classe en concaténant toutes les valeurs avec une virgule :
SELECT class, wm_concat(',', name) AS names
FROM students
GROUP BY class;
| class | names |
|---|---|
| 1 | LiLei,HanMM,Jim,HanMM |
| 2 | Kate,Peter |
Concaténation avec déduplication
Ajoutez le mot-clé DISTINCT pour supprimer les valeurs en double avant la concaténation :
SELECT class, wm_concat(DISTINCT ',', name) AS names
FROM students
GROUP BY class;
| class | names |
|---|---|
| 1 | LiLei,HanMM,Jim |
| 2 | Kate,Peter |
Compter les valeurs par catégorie (agrégation conditionnelle)
Combinez CASE WHEN et SUM pour faire pivoter les valeurs des lignes vers des colonnes. Cette méthode permet de compter le nombre de lignes répondant à chaque condition pour chaque groupe.
L'instruction suivante compte le nombre d'hommes et de femmes dans chaque classe :
SELECT
class,
SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS cnt_m,
SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS cnt_f
FROM students
GROUP BY class;
| class | cnt_m | cnt_f |
|---|---|---|
| 1 | 2 | 2 |
| 2 | 1 | 1 |
Pour ajouter davantage de catégories, incluez d'autres expressions SUM(CASE WHEN ...) dans la clause SELECT.