Maison >base de données >tutoriel mysql >Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)
L'éditeur ci-dessous vous proposera un article sur les méthodes mysql de conversion de colonnes en lignes et de fusion de champs (à lire absolument). L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil.
Tableau de données :
Changement de colonne : utiliser max. (cas quand alors)
max---agrégationfonction prendre la valeur maximale
(cas bien sûr quand ' Chinois' puis marque autre 0 fin) ---Jugement
comme langue---alias comme nom de colonne
SELECT `name`, MAX( CASE WHEN course='语文' THEN score END ) AS 语文, MAX( CASE WHEN course='数学' THEN score END ) AS 数学, MAX( CASE WHEN course='英语' THEN score END ) AS 英语 FROM student GROUP BY `name` ;
champ de fusion affichage : En utilisant group_cancat(course,":","score")
SELECT `name`, GROUP_CONCAT(course, ":", score) AS 成绩 FROM student GROUP BY `name`;
group_concat(), le manuel explique : Cette fonction renvoie une connexion avec un groupe. Résultat String pour une valeur non NULL.
Relativement abstrait et difficile à comprendre.
Pour le comprendre de manière simple, c'est en fait comme ceci : group_concat() calculera quelles lignes appartiennent au même groupe et affichera les colonnes appartenant au même groupe. Les colonnes à renvoyer sont déterminées par le paramètre de fonction
(c'est-à-dire le nom du champ). Il doit exister une norme de regroupement, qui consiste à regrouper en fonction de la colonne spécifiée par group by.
La fonction group_concat doit exécuter l'instruction group by en interne. C'est mon hypothèse.
1. Instruction de test :
SELECT GROUP_CONCAT(`name`) FROM student GROUP BY `name`;
Le résultat est de trouver quelles valeurs dans le nom sont les mêmes. égaux, tous Énumérez-les, séparés par des virgules, comme suit :
group_concat('name')
2. Test :
SELECT GROUP_CONCAT(`name`) FROM student ;
Résultat :
group_concat('name')
Ce qui précède peut-il prouver que group_concat ne peut avoir un effet que lorsqu'il est utilisé avec l'instruction group by ? Le test réel est effectué ci-dessous
3. TestConstant affecte la configuration de group_concat() :
SET @@GROUP_CONCAT_MAX_LEN=4Le manuel mentionne que la syntaxe de réglage est la suivante :
SET [SESSION | GLOBAL] group_concat_max_len = val;
Quelle est la différence entre les deux ?
SET @@global.GROUP_CONCAT_MAX_LEN=4; global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;
4. Utilisez la déclaration
SELECT GROUP_CONCAT(`name`) FROM student;
pour obtenir :
group_concat('name')
Conclusion : La fonction group_concat() doit être utilisée avec la regroupez par instruction, pour obtenir l’effet souhaité.
La raison peut être comprise comme suit : group_concat() récupère tous les membres appartenant au groupe x (les paramètres de colonne dans la fonction précisent quels champs doivent être affichés). D'où vient le groupe X ? S'il n'y a pas de groupe spécifié, alors il n'y a aucun moyen de savoir selon quel groupe group_concat() affichera les membres. Par conséquent, lorsqu'il n'y a pas de clause groupe par comme ci-dessus, Liu Bei, Guan Yu, Zhang Fei, Liu Bei, Guan Yu, Zhang Fei, Liu Bei, Guan Yu, Zhang Fei sont affichés.Quand cette fonction est-elle réellement nécessaire ?
Aussi, si je l'utilise comme ça :
SELECT `name`, GROUP_CONCAT(course, ":", score) AS 成绩 FROM student ;Ça n'a pas beaucoup de sens.
SELECT `name`, GROUP_CONCAT(course, ":", score) AS 成绩 FROM student GROUP BY `name`;Ensuite, le résultat affiché est similaire à ceci :
group_concat(course,":",score)
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!