当前位置:网站首页>MySQL如何把行转换为列?
MySQL如何把行转换为列?
2022-07-29 06:50:00 【你食不食油饼】
废话不多说,我们直接看一个例子:

这是我们建好的一张学生成绩表student_score,我们再来看一下转换之后需要得到的结果,如下图:

可以看出,这里行转列是将原来的subject字段的多行内容选出来,作为结果集中的不同列,再根据userid进行分组再显示对应的score,我们一般有两种方法实现
1、使用 CASE...WHEN...THEN 语句
SELECT userid,
SUM(CASE `subject` WHEN '语文' THEN score ELSE 0 END) as '语文',
SUM(CASE `subject` WHEN '数学' THEN score ELSE 0 END) as '数学',
SUM(CASE `subject` WHEN '英语' THEN score ELSE 0 END) as '英语',
SUM(CASE `subject` WHEN '政治' THEN score ELSE 0 END) as '政治'
FROM student_score
GROUP BY userid例如CASE `subject` WHEN '语文’ THEN score ELSE 0 END这条语句,即对所有字段subject=`语文`进行SUM()操作,设置值为score,如果没有则设置为0
2、使用IF()函数
SELECT userid,
SUM(IF(`subject`='语文',score,0)) as '语文',
SUM(IF(`subject`='数学',score,0)) as '数学',
SUM(IF(`subject`='英语',score,0)) as '英语',
SUM(IF(`subject`='政治',score,0)) as '政治'
FROM student_score
GROUP BY useridIF(subject=`语文`,score,0)作为条件,即对所有subject=`语文`的记录的score字段进行SUM()操作,如果score没有值则默认为0。
注意:SUM() 是为了能够使用GROUP BY根据userid进行分组,因为每一个userid对应的subject="语文"的记录只有一条,所以SUM() 的值就等于对应那一条记录的score的值。假如userid ='001' and subject='语文' 的记录有两条,则此时SUM() 的值将会是这两条记录的和,同理,使用Max()的值将会是这两条记录里面值最大的一个。但是正常情况下,一个user对应一个subject只有一个分数,因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函数都可以达到行转列的效果。
边栏推荐
- Unity发送Post请求给GoLang服务端解析并返回
- 使用VsCode配置MySQL实现连接、查询、等功能
- Kubernetes (五) ---------部署 Kubernetes Dashboard
- Flink实时仓库-DWD层(下单-多张表实现join操作)模板代码
- [OpenGL] use of shaders
- win11系统错误:由于找不到 iertutil.dll,无法继续执行代码。重新安装程序可能会解决此问题
- vagrant box 集群 处理
- Use vscode to configure Mysql to realize connection, query, and other functions
- Explanation of suffix automata (SAM) + Luogu p3804 [template] suffix automata (SAM)
- Win11vmware turns on the virtual machine and restarts on the blue screen and the solution that cannot be started
猜你喜欢

MutationObserver文档学习

Nodejs installation tutorial

Implementation of book borrowing management system based on C language

WPF简单登录页面的完成案例

Record - step on the pit - real-time data warehouse development - doris/pg/flink

建木持续集成平台v2.5.2发布

SpingBoot整合Quartz框架实现动态定时任务(支持实时增删改查任务)

Redis基础篇

Redis Basics

Revolution of game assets
随机推荐
gin 模版
DM data guard cluster setup
【Redis】Redis开发规范与注意事项
It's enough for MySQL to have this article (disgusting and crazy typing 37k words, just for Bo Jun's praise!!!)
Unity sends a post request to the golang server for parsing and returning
WPF nested layout case
330. 按要求补齐数组
SSH password free login - two virtual machines establish password free channel two-way trust
[Charles' daily problems] when you open Charles, you can't use nails
tp6 使用 ProtoBuf
MutationObserver文档学习
Improved pillar with fine grained feature for 3D object detection paper notes
Kubernetes (V) -- deploy kubernetes dashboard
Win11vmware turns on the virtual machine and restarts on the blue screen and the solution that cannot be started
Problems encountered in vmware16 installing virtual machines
LeetCode 879. 盈利计划
如何使用gs_expansion扩展节点
Implementation of book borrowing management system based on C language
SpingBoot整合Quartz框架实现动态定时任务(支持实时增删改查任务)
论文阅读 (62):Pointer Networks