当前位置:网站首页>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 userid
IF(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()等聚合函数都可以达到行转列的效果。
边栏推荐
- spark学习笔记(七)——sparkcore核心编程-RDD序列化/依赖关系/持久化/分区器/累加器/广播变量
- H3C_ Using setting default static routing priority to realize the active and standby function of export dual lines
- VMware16安装虚拟机遇到的问题
- 彻底搞懂kubernetes调度框架与插件
- Pod基本介绍
- MySQL 高级(进阶) SQL 语句 (一)
- win11系统错误:由于找不到 iertutil.dll,无法继续执行代码。重新安装程序可能会解决此问题
- 要不要满足客户所有的需求
- Summary of OCR optical character recognition methods
- Custom events
猜你喜欢
OCR光学字符识别方法汇总
对Vintage分析的一些学习理解
Explanation of suffix automata (SAM) + Luogu p3804 [template] suffix automata (SAM)
同步/异步、阻塞/非阻塞 与 IO
Operator3-设计一个operator
SSH password free login - two virtual machines establish password free channel two-way trust
Full process flow of CMOS chip manufacturing
Flink real time warehouse DWD layer (traffic domain) template code
Comparison of advantages between can & canfd integrated test analysis software lkmaster and PCA Explorer 6 analysis software
Nodejs installation tutorial
随机推荐
DM data guard cluster setup
WPF nested layout case
Kubernetes (V) -- deploy kubernetes dashboard
Ansible中的变量及加密
【charles日常问题】开启charles,使用不了钉钉
ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘解决方法
H3C_ Using setting default static routing priority to realize the active and standby function of export dual lines
npm install报错npm ERR Could not resolve dependency npm ERR peer
Win11 system error: code execution cannot continue because ierutil.dll cannot be found. Reinstalling the program may fix this problem
1172. The plate stack has a sequence table + stack
Personal blog system (with source code)
0 8 动态规划(Dynamic Programming)
Flink实时仓库-DWD层(kafka-关联mysql的lookup join)模板代码
[cf1054h] epic Revolution -- number theory, convolution, arbitrary modulus NTT
VMware16创建虚拟机:Win11无法安装
win11系统错误:由于找不到 iertutil.dll,无法继续执行代码。重新安装程序可能会解决此问题
建木持续集成平台v2.5.2发布
[OpenGL] use of shaders
Why does ETL often become ELT or even let?
MySQL - multi table query