当前位置: 代码网 > it编程>数据库>Mysql > MySQL行列互换的实现示例

MySQL行列互换的实现示例

2024年07月04日 Mysql 我要评论
场景1 行转换列1、表结构和数据/* navicat premium data transfer source server : 本地 source server type :

场景1 行转换列

1、表结构和数据

/*
 navicat premium data transfer

 source server         : 本地
 source server type    : mysql
 source server version : 80027
 source host           : localhost:3306
 source schema         : school

 target server type    : mysql
 target server version : 80027
 file encoding         : 65001

 date: 13/06/2024 14:50:51
*/

set names utf8mb4;
set foreign_key_checks = 0;

-- ----------------------------
-- table structure for score
-- ----------------------------
drop table if exists `score`;
create table `score`  (
  `stu_no` varchar(128) character set utf8 collate utf8_general_ci not null comment '学号',
  `course_no` varchar(128) character set utf8 collate utf8_general_ci not null comment '课程号',
  `score_prize` decimal(4, 1) null default null comment '成绩',
  primary key (`stu_no`, `course_no`) using btree
) engine = innodb character set = utf8 collate = utf8_general_ci row_format = dynamic;

-- ----------------------------
-- records of score
-- ----------------------------
insert into `score` values ('0001', '0001', 40.0);
insert into `score` values ('0001', '0002', 50.0);
insert into `score` values ('0001', '0003', 48.0);
insert into `score` values ('0002', '0001', 40.0);
insert into `score` values ('0002', '0002', 30.0);
insert into `score` values ('0002', '0003', 99.0);
insert into `score` values ('0003', '0001', 70.0);
insert into `score` values ('0003', '0002', 77.0);
insert into `score` values ('0003', '0003', 60.0);

set foreign_key_checks = 1;

2、效果图说明,第一列用户信息stu_no,第二列课程号course_no,第三列课程成绩

在这里插入图片描述

stu_no语文数学英语
000140.050.048.0
000240.030.099.0
000370.077.060.0

3、实现sql

select stu_no,
       sum(if(course_no = '0001', score_prize, 0)) as '语文',
       sum(if(course_no = '0002', score_prize, 0)) as '数学',
       sum(if(course_no = '0003', score_prize, 0)) as '英语'
from score
group by stu_no;

场景2:列转换行

1、准备数据表结构和数据

/*
 navicat premium data transfer

 source server         : 本地
 source server type    : mysql
 source server version : 80027
 source host           : localhost:3306
 source schema         : school

 target server type    : mysql
 target server version : 80027
 file encoding         : 65001

 date: 13/06/2024 14:54:37
*/

set names utf8mb4;
set foreign_key_checks = 0;

-- ----------------------------
-- table structure for cjs
-- ----------------------------
drop table if exists `cjs`;
create table `cjs`  (
  `name` varchar(32) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
  `chinese` int null default null,
  `math` int null default null,
  `phy` int null default null
) engine = innodb character set = utf8mb4 collate = utf8mb4_0900_ai_ci row_format = dynamic;

-- ----------------------------
-- records of cjs
-- ----------------------------
insert into `cjs` values ('张三', 89, 90, 79);
insert into `cjs` values ('李四', 88, 79, 90);

set foreign_key_checks = 1;

2、效果图

在这里插入图片描述

namecourse
张三90
张三89
张三79
李四79
李四88
李四90

3、业务代码

select *
from (
         select name, math as course
         from cjs
         union all
         select name, chinese as course
         from cjs
         union all
         select name, phy as course
         from cjs
     ) t
order by t.name;

到此这篇关于mysql行列互换的实现示例的文章就介绍到这了,更多相关mysql行列互换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com