当前位置: 首页 > article >正文

将MySQL中按行记录的数据转换成按列记录

将MySQL中按行记录的数据转换成按列记录

背景

在开发场景中,现系统部分表结构是这样的:

idtypevalue
1A10
1B20
1C30
2A40
2B50
2C60

而我想要的表结构是这样的:

idABC
1102030
2405060

因为后续要和其他表关联,所以在SQL查询时就需要进行行列转换。

实现方案

不难想到这里可以用分组+聚合函数来实现这一需求,曾以为有更好的解决方案,ChatGPT并没有给出,看来并没有。

利用max函数 + case when 语句

这是我自己想到的一个,实际上可以更简短。ai助手首先给出的也是这条。

SELECT MAX(CASE WHEN type = 'A' THEN value END) AS A,
       MAX(CASE WHEN type = 'B' THEN value END) AS B,
       MAX(CASE WHEN type = 'C' THEN value END) AS C
FROM your_table
GROUP BY id;

利用sum函数 + if函数

这是ai助手给的,在数字上是一样的,但是在别的类型上有一点问题,后面说明。

SELECT id,
       SUM(IF(type = 'A', value, 0)) AS A,
       SUM(IF(type = 'B', value, 0)) AS B,
       SUM(IF(type = 'C', value, 0)) AS C
FROM your_table
GROUP BY id;

其他

目测sum+case、max+if应该也是可以的,而且if更短更易读,例如:

SELECT id,
       max(IF(type = 'A', value, 0)) AS A,
       max(IF(type = 'B', value, 0)) AS B,
       max(IF(type = 'C', value, 0)) AS C
FROM your_table
GROUP BY id;

简单测试后发现,上面这条max if语句可以达到目标效果,而sum case、sum if的组合产生的是全数字的结果,对比发现其是截取了左起非数字字符前的所有数字。

例如我想要的效果是(省略表头):

23^张三2022-12-11
41^李四2023-7-21

sum的效果则是:

232022
412023

推测是sum函数对各类型数据做了截取,只转化计算了其中一部分数据。

声明:本文使用八爪鱼rpa工具从gitee自动搬运本人原创(或摘录,会备注出处)博客,如版式错乱请评论私信,如情况紧急或久未回复请致邮 xkm.0jiejie0@qq.com 并备注原委;引用本人笔记的链接正常情况下均可访问,如打不开请查看该链接末尾的笔记标题(右击链接文本,点击 复制链接地址,在文本编辑工具粘贴查看,也可在搜索框粘贴后直接编辑然后搜索),在本人博客手动搜索该标题即可;如遇任何问题,或有更佳方案,欢迎与我沟通!


http://www.kler.cn/news/356315.html

相关文章:

  • 【EJS】JavaScript 模板引擎
  • DC系列靶机-DC6
  • 深度学习代码学习笔记2
  • 超详细的Java Web开发
  • C++之《剑指offer》学习记录(3):拷贝构造函数
  • SpringBoot的Web项目Mybatis-plus多数据源
  • Python实现贪吃蛇大作战
  • 基于SpringBoot+Vue+uniapp微信小程序的澡堂预订的微信小程序的详细设计和实现
  • MYSQL OPTIMIZE TABLE 命令重建表和索引
  • CSS 居中那些事
  • YashanDB学习-数据库SQL基础操作
  • 【Linux】理解文件系统与软硬链接,观察inode号理解<“软链接是包含路径的新文件“,“硬链接是关于文件名的机制“>,最终明白<什么是真正删除一个文件>
  • 爱快路由器配置腾讯云动态域名DDNS详细说明
  • windows 10家庭版无法打开组策略的方法,亲测有效
  • Spring Cloud Alibaba 体系-组件-Sentinel
  • 电影评论系统:Spring Boot设计与实现
  • 宇宙汽车展览如何以创新性、个性化与便捷性,重塑汽车展示生态
  • 中仕公考:国考省考能一起备考吗?
  • 【博士每天一篇文献-算法】持续学习之GEM算法:Gradient Episodic Memory for Continual Learning
  • 【Python】高级特性