SQL中怎么将行转成列?
文章目录
- 天天这需求就神奇!!!!
- SQL中怎么将行转成列?
- 1. 使用 CASE...WHEN...THEN 语句实现行转列,参考如下代码:
- 2. 使用 IF() 函数实现行转列,参考如下代码:
天天这需求就神奇!!!!
SQL中怎么将行转成列?
我们以MySQL数据库为例,来说明行转列的实现方式。
首先,假设我们有一张分数表(tb_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 tb_score
GROUP BY userid
注意,SUM() 是为了能够使用GROUP BY
根据userid进行分组,因为每一个userid对应的
subject="语文"的记录只有一条,所以SUM() 的值就等于对应那一条记录的score的值。假如userid ='001' and subject='语文'
的记录有两条,则此时SUM() 的值将会是这两条记录的和,同理,使用Max()的值将会是这两条记录里面值最大的一个。但是正常情况下,一个user对应一个subject只有一个分数,因此可以使用SUM()、MAX()、MIN()、AVG()
等聚合函数都可以达到行转列的效果。
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 tb_score
GROUP BY userid
注意, IF(subject='语文',score,0)
作为条件,即对所有subject='语文’的记录的score字段进行SUM()、MAX()、MIN()、AVG()
操作,如果score没有值则默认为0。
SQL中怎么将行转成列?相关推荐
- Vue中el-table追加行后固定列滚动错位问题
Vue中el-table追加行后固定列滚动错位问题 一.问题描述 偶然发现一个问题,但是并没有找到解决方案,自己调试了两个多小时终于解决. 先贴出问题 业务描述:在已查询完全部的符合条件的数据后,表格 ...
- Java黑皮书课后题第8章:**8.4(计算每个雇员每周工作的小时数)假定所有雇员每周工作的小时数存储在一个二维数组中。1行包含7列,记录了一个雇员7天的工作小时数。编写一个程序,按照总工时降序显示
**8.4(计算每个雇员每周工作的小时数)假定所有雇员每周工作的小时数存储在一个二维数组中.1行包含7列,记录了一个雇员7天的工作小时数.编写一个程序,按照总工时降序显示 题目 题目描述 破题 代码 ...
- SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇 --前几天还在抱怨:sql只有sum(数值),不能sum(字符串) --如果不是分组统计,用select @values = @values + ',' + value ...
- mysql将行显示成列_mysql – 在表中将行显示为列
我有一张像下面这样的表 CREATE TABLE Statistics(Stat_Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Period VARCHAR( ...
- oracle 动态行转成列,Oracle 行转列 动态出转换的列
一.运行环境 Win10,Oracle Database 11g r2,plsql 12. 二.效果预览 1.固定转换列的方法 2.存储过程处理 1)调用存储过程 2)查指定的视图即可 3.两种方法的 ...
- python每行乘列表_python – 在pandas数据帧中查找每行的两列列表中哪一列的最快方法...
我正在寻找最快的方法来做到以下几点: 我们有一个pd.DataFrame: df = pd.DataFrame({ 'High': [1.3,1.2,1.1], 'Low': [1.3,1.2,1.1 ...
- OpenCV中 Mat 按行或按列合并程序
按行合并 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespa ...
- numpy中array的行数和列数
import numpy as np x = np.array([[1,2,5],[2,3,5],[3,4,5],[2,3,6]]) # 输出数组的行和列数 print(x.shape) # (4, ...
- mysql行转列sql函数_SQL 将行转化为列实现列的动态更新
现有数据表: codenames type flag zhao a y zhao b n zhao c y li a n li ...
最新文章
- python实现yolo目标检测_从零开始PyTorch项目:YOLO v3目标检测实现
- C#3.0笔记(五)Lambda表达式
- python资料书-关于 Python 的经典入门书籍有哪些?
- 一文看懂软件测试方法和规范
- matlab for 取数组,for循环中的MATLAB和单元格数组处理
- Log4j2突发重大漏洞
- 基于JAVA+SpringMVC+Mybatis+MYSQL的客户关系管理系统
- 美元指数DXY短线走高10逾点,现报90.77
- Android传感器模拟器,如何为Android构建传感器模拟器?
- newton版本linux,centos7.4下安装部署openstack newton版本 互联网技术圈 互联网技术圈...
- delphi 获取打印机默认纸张_如何设置一台打印机打印不同尺寸的纸张
- 小明利用计算机软件绘制函数,辽宁省大连市2014年高二学业水平模拟考试 信息技术试题(三)...
- 软Raid5,LVM,3T大硬盘纠缠操作的问题
- 百度网盘资源转迅雷下载正确打开方式!
- java怎么解析json_基于java解析JSON的三种方式详解
- Seafile搭建以及onlyoffice在线办公
- 全志定制编译Android,全志H3 Android定制化文档
- 参考《机器学习实战》高清中文PDF+高清英文PDF+源代码
- qt 截图 视频 截屏幕 截窗口
- 解决Word文档中表格不会自动换页,而是在同一页word上往下换行的问题。