MySQL中行转列与列转行是数据查询的常见操作,以更好地展示数据,以下是详细回答:
一、行转列
行转列是指将一条条的行数据记录转换为一条列数据展示,通常根据某一列来做汇总数据的操作,这种操作使得数据看起来更加直观,一目了然,以下是实现行转列的具体步骤和示例:
1、创建表并插入数据:
CREATE TABLEst_grade
(id
int(10) NOT NULL AUTO_INCREMENT,stu_name
varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,course
varchar(20) DEFAULT NULL,score
float(4,1) DEFAULT NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; INSERT INTOst_grade
VALUES ('1', '张三', '语文', '86.0'); INSERT INTOst_grade
VALUES ('2', '张三', '数学', '90.0'); INSERT INTOst_grade
VALUES ('3', '张三', '英语', '75.0'); INSERT INTOst_grade
VALUES ('4', '李四', '语文', '92.0'); INSERT INTOst_grade
VALUES ('5', '李四', '数学', '93.0'); INSERT INTOst_grade
VALUES ('6', '李四', '英语', '96.0'); INSERT INTOst_grade
VALUES ('7', '王五', '语文', '82.0'); INSERT INTOst_grade
VALUES ('8', '王五', '数学', '71.0'); INSERT INTOst_grade
VALUES ('9', '王五', '英语', '74.0');
2、查询语句实现行转列:
select stu_name, max(case course when '语文' then score else 0 end ) 语文, max(case course when '数学' then score else 0 end ) 数学, max(case course when '英语' then score else 0 end ) 英语 from st_grade group by stu_name;
二、列转行
列转行是将一条列数据转换为一条条的行数据记录展示,通常将某一行数据根据某些列进行分组操作,以下是实现列转行的具体步骤和示例:
1、创建表并插入数据(使用与行转列相同的表和数据):
CREATE TABLEst_grade
(id
int(10) NOT NULL AUTO_INCREMENT,stu_name
varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,course
varchar(20) DEFAULT NULL,score
float(4,1) DEFAULT NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; INSERT INTOst_grade
VALUES ('1', '张三', '语文', '86.0'); INSERT INTOst_grade
VALUES ('2', '张三', '数学', '90.0'); INSERT INTOst_grade
VALUES ('3', '张三', '英语', '75.0'); INSERT INTOst_grade
VALUES ('4', '李四', '语文', '92.0'); INSERT INTOst_grade
VALUES ('5', '李四', '数学', '93.0'); INSERT INTOst_grade
VALUES ('6', '李四', '英语', '96.0'); INSERT INTOst_grade
VALUES ('7', '王五', '语文', '82.0'); INSERT INTOst_grade
VALUES ('8', '王五', '数学', '71.0'); INSERT INTOst_grade
VALUES ('9', '王五', '英语', '74.0');
2、查询语句实现列转行:
select stu_name, '语文' course, cn_score as score from st_grade union select stu_name, '数学' course, math_score as score from st_grade union select stu_name, '英语' course, en_score as score from st_grade order by stu_name, course;
三、相关问答FAQs
1、如何在MySQL中实现行转列?
答:在MySQL中,可以使用CASE语句结合聚合函数来实现行转列。
select stu_name, max(case course when '语文' then score else 0 end ) 语文, max(case course when '数学' then score else 0 end ) 数学, max(case course when '英语' then score else 0 end ) 英语 from st_grade group by stu_name;
2、如何在MySQL中实现列转行?
答:在MySQL中,可以使用UNION ALL将多列数据合并为一行。
select stu_name, '语文' course, cn_score as score from st_grade union all select stu_name, '数学' course, math_score as score from st_grade union all select stu_name, '英语' course, en_score as score from st_grade order by stu_name, course;
小编有话说
在MySQL中进行行转列和列转行操作时,需要根据具体的需求选择合适的方法,通过合理地使用SQL语句,可以更高效地处理和展示数据,从而满足不同的分析和报告需求,希望以上内容能对你有所帮助,如果有任何疑问或建议,欢迎留言讨论!
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1455340.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复