Maison >base de données >tutoriel mysql >Comment faire pivoter les données dans MySQL à l'aide de GROUP_CONCAT et gérer les en-têtes de colonnes dynamiques ?
REQUÊTE PIVOT/CROSSTAB MySQL
Dans l'analyse des données, il est souvent nécessaire de transformer les données d'un format vertical vers un format horizontal, appelé sous forme de tableaux croisés ou croisés. Dans MySQL, cela peut être réalisé en utilisant diverses techniques.
Création d'un tableau croisé dynamique
Question 1 : Considérons un tableau contenant les colonnes suivantes : app_id, transaction_id, mobile_no, node_id, customer_attribute et enter_value. La tâche consiste à créer un tableau croisé dynamique regroupé par app_id, transaction_id et mobile_no, avec les valeurs de node_id devenant des en-têtes de colonne et la valeur saisie correspondante étant affichée dans les cellules.
Réponse : Ceci peut être réalisé à l'aide de la fonction GROUP_CONCAT :
SELECT app_id, transaction_id, mobile_no, GROUP_CONCAT(CASE WHEN node_id = 1 THEN entered_value ELSE NULL END) AS Q1, GROUP_CONCAT(CASE WHEN node_id = 2 THEN entered_value ELSE NULL END) AS Q2, GROUP_CONCAT(CASE WHEN node_id = 3 THEN entered_value ELSE NULL END) AS Q3, GROUP_CONCAT(CASE WHEN node_id = 4 THEN entered_value ELSE NULL END) AS Q4, GROUP_CONCAT(CASE WHEN node_id = 5 THEN entered_value ELSE NULL END) AS Q5 FROM trn_user_log GROUP BY app_id, transaction_id, mobile_no;
En utilisant NAME_CONST
Question 2 : Au lieu d'utiliser user_input1, user_input2, etc. comme en-têtes de colonne, vous souhaitez utiliser les valeurs stockées dans customer_attribute.
Réponse : Cela peut être réalisé en utilisant la fonction NAME_CONST, mais une erreur s'est produite en raison aux arguments incorrects fournis :
SELECT app_id, transaction_id, mobile_no, NAME_CONST(customer_attribute, (CASE WHEN node_id = 1 THEN entered_value ELSE NULL END)) FROM trn_user_log;
La fonction attend une valeur constante pour le deuxième argument, une modification est donc nécessaire :
SELECT app_id, transaction_id, mobile_no, CASE node_id WHEN 1 THEN NAME_CONST(customer_attribute, entered_value) ELSE NULL END AS customer_attribute FROM trn_user_log;
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!