GROUP_CONCAT est une fonction d'agrégation fournie par MySQL. Elle concatène les valeurs de colonne de plusieurs lignes au sein de chaque groupe généré par l'instruction GROUP BY en une seule chaîne. Utilisez cette fonction pour combiner plusieurs enregistrements de données en un seul. Dans MaxCompute, utilisez la fonction WM_CONCAT pour obtenir le même résultat que GROUP_CONCAT.
Exemple
Une table nommée price_total contient les colonnes suivantes : name, price et saleid. La table contient les données ci-dessous :
+--------+------------+------------+
| name | price | saleid |
+--------+------------+------------+
| bag | 50 | 1 |
| sugar | 20 | 3 |
| noodle | 2 | 4 |
| potato | 5 | 6 |
| bag | 100 | 2 |
| sugar | 10 | 4 |
| potato | 4 | 3 |
| sugar | 50 | 7 |
| noodle | 2 | 5 |
| noodle | 5 | 1 |
+--------+------------+------------+
Dans cet exemple, les produits sont regroupés par nom (colonne name de la table). Utilisez la fonction GROUP_CONCAT dans MySQL pour répondre aux exigences suivantes :
-
Exigence 1 : fusionner les valeurs de la colonne price d'un même groupe. Les résultats renvoyés contiennent des doublons. Exemple d'instruction :
SELECT name, group_concat(price) FROM price_total GROUP BY name; -
Exigence 2 : fusionner les valeurs de la colonne price d'un même groupe. Les résultats renvoyés ne contiennent pas de doublons. Exemple d'instruction :
SELECT name, group_concat(distinct price) FROM price_total GROUP BY name; -
Exigence 3 : fusionner et trier les valeurs de la colonne price d'un même groupe. Les résultats renvoyés contiennent des doublons. Exemple d'instruction :
SELECT name, group_concat(price ORDER BY price desc) FROM price_total GROUP BY name; -
Exigence 4 : fusionner et trier les valeurs de la colonne price d'un même groupe. Les résultats renvoyés ne contiennent pas de doublons. Exemple d'instruction :
SELECT name, group_concat(distinct price ORDER BY price desc) FROM price_total GROUP BY name; -
Exigence 5 : fusionner les valeurs de la colonne price et celles de la colonne saleid d'un même groupe. Exemple d'instruction :
SELECT name, group_concat(concat_ws(':', price, saleid)) FROM price_total GROUP BY name;
Solution
MaxCompute ne prend pas en charge la fonction GROUP_CONCAT. Utilisez la fonction WM_CONCAT pour répondre aux exigences de cet exemple.
Notez que la fonction WM_CONCAT n'est pas équivalente à la fonction GROUP_CONCAT. Le tableau suivant décrit les capacités de ces fonctions.
|
Fonctionnalité |
WM_CONCAT |
GROUP_CONCAT |
Description |
|
Déduplication avec DISTINCT |
|
|
Aucune. |
|
Délimiteur |
|
|
Un délimiteur permet de concaténer les valeurs à fusionner. Tenez compte des points suivants lors de l'inclusion de délimiteurs dans les fonctions WM_CONCAT et GROUP_CONCAT :
|
|
Tri |
|
|
Pour trier les valeurs, procédez comme suit :
|
|
Fusion de plusieurs colonnes |
|
|
Les fonctions WM_CONCAT et GROUP_CONCAT permettent de fusionner des lignes. Combinez ces deux fonctions avec la fonction CONCAT ou la fonction CONCAT_WS, qui servent à fusionner des colonnes, afin de fusionner les valeurs de plusieurs colonnes dans différents groupes. |
Utilisez la fonction WM_CONCAT pour répondre aux exigences suivantes, en vous basant sur les capacités décrites dans le tableau précédent :
-
Exigence 1 : fusionner les valeurs de la colonne price d'un même groupe. Les résultats renvoyés contiennent des doublons.
SELECT name, wm_concat(',', price) AS price_new FROM price_total GROUP BY name;Le résultat suivant est renvoyé :
+--------+-----------+ | name | price_new | +--------+-----------+ | bag | 50,100 | | noodle | 2,2,5 | | potato | 5,4 | | sugar | 20,10,50 | +--------+-----------+ -
Exigence 2 : fusionner les valeurs de la colonne price d'un même groupe. Les résultats renvoyés ne contiennent pas de doublons.
SELECT name, wm_concat(distinct ',', price) AS price_new FROM price_total GROUP BY name;Le résultat suivant est renvoyé :
+--------+-----------+ | name | price_new | +--------+-----------+ | bag | 100,50 | | noodle | 2,5 | | potato | 4,5 | | sugar | 10,20,50 | +--------+-----------+ -
Exigence 3 : fusionner et trier les valeurs de la colonne price d'un même groupe. Les résultats renvoyés contiennent des doublons.
-
Méthode 1 :
SELECT name, wm_concat(',', price) WITHIN GROUP (ORDER BY price desc) AS price_new FROM (SELECT name, price FROM price_total) GROUP BY name; -
Méthode 2 :
SELECT name, wm_concat(',', price) AS price_new FROM (SELECT name, price FROM price_total ORDER BY name, price desc LIMIT 100) GROUP BY name; -
Le résultat suivant est renvoyé :
+--------+-----------+ | name | price_new | +--------+-----------+ | bag | 100,50 | | noodle | 5,2,2 | | potato | 5,4 | | sugar | 50,20,10 | +--------+-----------+
-
-
Exigence 4 : fusionner et trier les valeurs de la colonne price d'un même groupe. Les résultats renvoyés ne contiennent pas de doublons.
-
Méthode 1 :
SELECT name, wm_concat(',', price) within GROUP (ORDER BY price asc) FROM (SELECT DISTINCT name, price FROM price_total) GROUP BY name; -
Méthode 2 :
SELECT name, wm_concat(',', price) AS price_new FROM (SELECT DISTINCT name, price FROM price_total ORDER BY name, price asc LIMIT 100) GROUP BY name; -
Le résultat suivant est renvoyé :
+--------+-----------+ | name | price_new | +--------+-----------+ | bag | 50,100 | | noodle | 2,5 | | potato | 4,5 | | sugar | 10,20,50 | +--------+-----------+
-
-
Exigence 5 : fusionner les valeurs de la colonne price et celles de la colonne saleid d'un même groupe.
SELECT name, wm_concat(',', concat_ws(':',price,saleid)) AS price_new FROM price_total GROUP BY name; -- The preceding statement is equivalent to the following statement: SELECT name, wm_concat(',', concat(price,':',saleid)) FROM price_total GROUP BY name;Le résultat suivant est renvoyé :
+--------+-----------------+ | name | price_new | +--------+-----------------+ | bag | 50:1,100:2 | | noodle | 2:4,2:5,5:1 | | potato | 5:6,4:3 | | sugar | 20:3,10:4,50:7 | +--------+-----------------+
Références
Pour en savoir plus sur l'implémentation des fonctions intégrées de Hive, MySQL et Oracle dans MaxCompute, consultez Correspondances entre les fonctions intégrées de MaxCompute et celles de Hive, MySQL et Oracle.
Si les fonctions intégrées fournies par MaxCompute ne répondent pas à vos besoins métier, développez des UDF. Pour plus d'informations sur les UDF, consultez Présentation.