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

MySQL行转列

在数据库操作中,有时我们需要将行数据转换为列数据,这在生成报表或进行数据汇总时尤为常见。本文将以一个学生成绩表为例,演示在MySQL中实现行转列的几种方法。

示例数据

假设我们有一个学生成绩表 score,包含以下三列:sid(学生ID)、cid(科目ID)和score(分数)。表中的数据如下:

sidcidscore
1190
1285
1395
2188
2292
2387
3195
3289
3391

我们的目标是将这些行数据转换为列数据,使得每个学生的成绩按科目显示在不同的列中。

方法1:使用 GROUP BY 和 CASE 语句

这是最常用的方法之一,通过使用 GROUP BY 和 CASE 语句,可以将行数据聚合并转换为列数据。

SELECT sid,MAX(CASE WHEN cid = 1 THEN score ELSE NULL END) AS a,MAX(CASE WHEN cid = 2 THEN score ELSE NULL END) AS b,MAX(CASE WHEN cid = 3 THEN score ELSE NULL END) AS c
FROM score
GROUP BY sid;

结果将是:

sidabc
1908595
2889287
3958991

方法2:使用子查询和聚合函数

SELECT s1.sid,s1.score AS a,s2.score AS b,s3.score AS c
FROM (SELECT sid, score FROM score WHERE cid = 1) s1
LEFT JOIN (SELECT sid, score FROM score WHERE cid = 2) s2 ON s1.sid = s2.sid
LEFT JOIN (SELECT sid, score FROM score WHERE cid = 3) s3 ON s1.sid = s3.sid;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 聊聊Netty对于内存方面的优化
  • 使用 Sahi 实现 Web 自动化测试
  • HeterGCL-Graph Contrastive Learning Framework on Heterophilic Graph
  • 魅族20机型 M2381“工程固件”作用分析以及写入步骤
  • 机器学习,深度学习,AGI,AI的概念和区别
  • Mycat搭建分库分表
  • PyRFC 适用于 Python 的异步、非阻塞 SAP NetWeaver RFC SDK 绑定
  • 2012年408考研真题-数据结构
  • 重生之我在Java世界------学单例设计模式
  • 智谱清影 -CogVideoX-2b-部署与使用,带你揭秘生成6s视频的极致体验!
  • 正点原子阿尔法ARM开发板-IMX6ULL(七)——BSP工程管理实验(补:链接文件和.s文件)
  • 阅信云CTO向永清:35岁不应该成为技术职业发展的瓶颈|OceanBase 《DB大咖说》
  • 比backtrader还简单的量化回测框架,bt的使用方式以及示例
  • SpringCache
  • 简明linux系统编程--共享内存消息队列信号量
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【Amaple教程】5. 插件
  • ERLANG 网工修炼笔记 ---- UDP
  • ES6之路之模块详解
  • JAVA SE 6 GC调优笔记
  • java 多线程基础, 我觉得还是有必要看看的
  • js 实现textarea输入字数提示
  • js如何打印object对象
  • Nacos系列:Nacos的Java SDK使用
  • passportjs 源码分析
  • React as a UI Runtime(五、列表)
  • 程序员最讨厌的9句话,你可有补充?
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 给Prometheus造假数据的方法
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C++20) consteval立即函数
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (补)B+树一些思想
  • (二开)Flink 修改源码拓展 SQL 语法
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (论文阅读11/100)Fast R-CNN
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)图像的%2线性拉伸
  • (转)iOS字体
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Core 中间件验签
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET6实现破解Modbus poll点表配置文件
  • @WebService和@WebMethod注解的用法