如何实现MySQL中的行转列与列转行操作?

在 MySQL 中,可以使用 CASE 语句或 IF 函数结合 GROUP_CONCAT 来实现行转列,而使用 UNION ALL 可以将多个列合并为一个列,实现列转行

MySQL中行转列列转行是数据查询的常见操作,以更好地展示数据,以下是详细回答:

如何实现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;

二、列转行

列转行是将一条列数据转换为一条条的行数据记录展示,通常将某一行数据根据某些列进行分组操作,以下是实现列转行的具体步骤和示例:

如何实现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, '语文' 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语句结合聚合函数来实现行转列。

如何实现MySQL中的行转列与列转行操作?

   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

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希
上一篇 2025-01-03 20:53
下一篇 2025-01-03 20:57

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入