当前位置:网站首页>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()等聚合函数都可以达到行转列的效果。
边栏推荐
- WPF 界面布局必知基础
- Latest 10 billion quantitative private placement list
- NPM install reports an error NPM err could not resolve dependency NPM err peer
- Gin template
- 0 8 动态规划(Dynamic Programming)
- 解决CSDN因版权不明而无法发布博客的问题
- [redis] redis development specifications and precautions
- Vmware16 create virtual machine: cannot create a new virtual machine, do not have permission to perform this operation
- Ansible中的变量及加密
- Gin Middleware
猜你喜欢
![[OpenGL] use of shaders](/img/73/1322afec8add6462ca4b82cb8112d1.png)
[OpenGL] use of shaders

Nodejs安装教程

JS 鸡生蛋与蛋生鸡问题,Object与Function究竟谁出现的更早?Function算不算Function的实例?

Error 1045 (28000) access denied for user 'root' @ 'localhost' solution

Vmware16 create virtual machine: cannot create a new virtual machine, do not have permission to perform this operation

【charles日常问题】开启charles,使用不了钉钉

MutationObserver文档学习

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

MySQL----多表查询

VMware16创建虚拟机:Win11无法安装
随机推荐
VMware16安装虚拟机遇到的问题
Connecting PHP 7.4 to Oracle configuration on Windows
Guess the number / / generate a random number for the first time
时钟树综合(一)
MySQL 使用客户端以及SELECT 方式查看 BLOB 类型字段内容总结
gin 模版
微服务远程调用
After three years of outsourcing, the salary of automatic testing after job hopping is twice that of the original. The secret is
Pod基本介绍
数组的子集不能累加出的最小正数
【OpenGL】着色器(Shader)的使用
[solution] error: lib/bridge_ generated. dart:837:9: Error: The parameter ‘ptr‘ of the method ‘FlutterRustB
OCR光学字符识别方法汇总
Record - step on the pit - real-time data warehouse development - doris/pg/flink
330. 按要求补齐数组
gin 服务退出
MySQL advanced (Advanced) SQL statement (I)
Flink real-time warehouse DWD layer (Kafka associated with MySQL lookup join) template code
Redis Basics
Vite3.0都发布了,你还能卷得动吗(新特性一览)