mysql行转列( 不确定列)

本文介绍了如何使用MySQL的预处理语句和存储过程实现标准的行转列操作。通过创建并执行存储过程,演示了在具有重复数据的表中进行数据聚合和统计的方法。示例中,对`xxl-job-stu`表的数据进行了转换,展示了获取特定列总成绩的过程。同时,文章提到在MyBatis中处理结果集的方式。
摘要由CSDN通过智能技术生成

题目

标准的行转列做法,有很多种做法 case when,我这里选择的是 mysql的预处理语句
MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT

查变百度 都是返回两个结果集的,无奈只能获取第二个数据集

大佬写的文章
https://www.cnblogs.com/hanjun0612/p/9779789.html
在这里插入图片描述
表结构

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `xxl-job-stu`;
CREATE TABLE `xxl-job-stu` (
  `name` varchar(64) DEFAULT NULL,
  `course` varchar(32) DEFAULT NULL,
  `score` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of student
-- ----------------------------
BEGIN;
INSERT INTO `xxl-job-stu` VALUES ('张青', '语文', 72);
INSERT INTO `xxl-job-stu` VALUES ('王凤', '数学', 72);
INSERT INTO `xxl-job-stu` VALUES ('张华', '英语', 81);
INSERT INTO `xxl-job-stu` VALUES ('张青', '物理', 67);
INSERT INTO `xxl-job-stu` VALUES ('李立', '化学', 98);
INSERT INTO `xxl-job-stu` VALUES ('张燕', '物理', 75);
INSERT INTO `xxl-job-stu` VALUES ('张青', '化学', 76);
INSERT INTO `xxl-job-stu` VALUES ('张华', '数学', 80);
INSERT INTO `xxl-job-stu` VALUES ('张燕', '语文', 90);
COMMIT;

sql解决方案

-- drop PROCEDURE sp_mytest  删除存储过程
-- 注意 WITH ROLLUP 的使用
create PROCEDURE sp_mytest()
begin 
	SET @EE='';
	select @EE :=CONCAT(@EE,'sum(if(course= \'',course,'\',score,0)) as ',course, ',') AS aa FROM (SELECT DISTINCT course FROM  `xxl-job-stu`) A;
	SET @QQ = CONCAT('select name,',@EE,' sum(score) as 总成绩 from `xxl-job-stu` group by name WITH ROLLUP ');

PREPARE stmt FROM @QQ;
EXECUTE stmt;

end
-- 运行存储过程
call sp_mytest()

结果

在这里插入图片描述
在这里插入图片描述
使用 mybatis 的情况直接 或者 list结果集 get(0) 就可以了

如果你找到更好的解决方案 可以下面评论一下更好

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值