广告
返回顶部
首页 > 资讯 > 数据库 >MySQL实现行列转换
  • 827
分享到

MySQL实现行列转换

MySQL行列转换 2022-07-08 11:07:08 827人浏览 安东尼
摘要

实际应用中,会遇到需要把表的某些行转换成列,或者把列转换成行的情况。比如一张表在数据库中是这样的: 图1 但是,需要的结果可能是这样: 图2 这个时候就得行列转换了。 1.行转列的几种方法 1.1 case... w

实际应用中,会遇到需要把表的某些行转换成列,或者把列转换成行的情况。比如一张表在数据库中是这样的:

MySQL实现行列转换

图1

但是,需要的结果可能是这样:

MySQL实现行列转换

图2

这个时候就得行列转换了。

1.行转列的几种方法

1.1 case... when ... then ... else ... end

select uname,uid, -- 正常查询的字段
sum(
case
when course ='英语' then score -- 需要转换的字段
else 0
end) '英语',
sum(
case
when course= '物理' then score
else 0
end) '物理',
sum(
case 
when course='化学' then score
else 0
end) '化学'
from course
group by uid

另一种写法:

case course
when '化学' then score
else 0
end

另外若省略‘else 0‘,则没有该课程的同学的分数会填充为null; sum替换成max结果一样。

1.2 if (`字段名1`=‘字段值’,,)

select uname,uid,
sum(if(`course`='英语',score,0)) '英语',
sum(if(`course`='物理',score,0)) '物理',
sum(if(`course`='化学',score,0)) '化学'
from course
group by uname

貌似比第一种方法简洁一些,所以下面的扩展是基于这种方法的~

以上两种转换方法结果相同,如图2。另外实际应用中还可能需要有总计的结果,如图3.

MySQL实现行列转换

图3

total这一列简单,直接在之前的查询基础上加一个sum(score) 'total'即可;Total这一行则可以看成之前的查询不加group by而聚合成一行。因此可以看做是两个表组合到一起如图4和图5:

MySQL实现行列转换

图4

MySQL实现行列转换

图5

1.3 if (`字段名1`=‘字段值’,,) + uNIOn

把两个查询结果拼接到一起就是图3的样子了,代码如下:

select uid,uname,
sum(if(`course`='英语',score,0)) '英语',
sum(if(`course`='物理',score,0)) '物理',
sum(if(`course`='化学',score,0)) '化学',
sum(score) 'total'
from course
group by uname
union
select 'Total',null,
sum(if(`course`='英语',score,0)) '英语',
sum(if(`course`='物理',score,0)) '物理',
sum(if(`course`='化学',score,0)) '化学',
sum(score) 'total'
from course

1.4 if (`字段名1`=‘字段值’,,) + IFNULL()+with rollup

这种方法效果同1.3,

select ifnull(uid,'Total') uid, uname,
sum(if(`course`='英语',score,0)) '英语',
sum(if(`course`='物理',score,0)) '物理',
sum(if(`course`='化学',score,0)) '化学',
sum(score) 'total'
from course
group by uid
with ROLLUP

比1.3简洁一些,效率应该也高一点。with rollup和group by配套使用,会在已有的查询结果上再多出一行,对结果再聚合成一行,即图5的那一行,若不是数字类型,则返回最下面一行的数据,最后一行分组的字段会显示null,因此在配合ifnull()就可以了。

MySQL实现行列转换

有瑕疵,想把它变成 null,有待完善。

2.列转行

列转行刚好和行转列情况相反,即:

数据库中存储的是这样

MySQL实现行列转换

图2

而我们需要这样的结果

MySQL实现行列转换

图1

没有在创建新表,暂且把这个视图当成新表吧

create view rtc as
select ifnull(uid,'Total') uid,uname,
sum(if(`course`='英语',score,0)) '英语',
sum(if(`course`='物理',score,0)) '物理',
sum(if(`course`='化学',score,0)) '化学',
sum(score) 'total'
from course
group by uid
with ROLLUP
-- 下面是列转行代码
select uid,uname,'英语' course,英语 score from rtc where uid <>'Total' and 英语>0
union all select uid,uname,'物理' ,物理 from rtc where uid <>'Total' and 物理>0
union all select uid,uname,'化学' ,化学 from rtc where uid <>'Total' and 化学>0

到此这篇关于Mysql实现行列转换的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL实现行列转换

本文链接: https://www.lsjlt.com/news/33275.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL实现行列转换
    实际应用中,会遇到需要把表的某些行转换成列,或者把列转换成行的情况。比如一张表在数据库中是这样的: 图1 但是,需要的结果可能是这样: 图2 这个时候就得行列转换了。 1.行转列的几种方法 1.1 case... w...
    99+
    2022-07-08
    MySQL 行列转换
  • mysql中怎么实现行列转换操作
    这篇文章将为大家详细讲解有关mysql中怎么实现行列转换操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。create table tx(id int pr...
    99+
    2022-10-18
  • vue3+el-table实现行列转换
    目录行列转换 分析成绩单的组成 用 vue3 + el-table 做的成绩单 前端模拟数据 使用 el-table 生成成绩单 确定表头 确定数据 计算学生的总分和平均分 计算排名...
    99+
    2022-11-12
  • 如何实现mysql行转列
    下面一起来了解下如何实现mysql行转列,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何实现mysql行转列这篇短内容是你想要的。 原始数据如下:mysql> select ...
    99+
    2022-10-18
  • mysql中的行列转换方法
    这篇文章主要介绍“mysql中的行列转换方法”,在日常操作中,相信很多人在mysql中的行列转换方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的行列转换方法”...
    99+
    2022-10-18
  • C# DataGridView行列转换如何实现
    这篇文章主要讲解了“C# DataGridView行列转换如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# DataGridView行列转换如何实现”吧!初始表...
    99+
    2023-07-05
  • C#实现DataTable数据行列转换
    一、代码 public static DataTable RevertRowToColumn(DataTable sourcedt) { ...
    99+
    2022-11-13
  • mysql实现行转列的方法
    这篇文章主要介绍mysql实现行转列的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql实现行转列的方法:1、用cross join的方式实现,代码为【cross join...
    99+
    2022-10-18
  • mysql 行列转换的示例代码
    一、需求 我们有三张表,我们需要分类统计一段时间内抗生素的不同药敏结果,即 report_item_drugs 表的 drugs_result, 在不同项目project_name 和不同抗生素 antibiotic...
    99+
    2022-05-27
    mysql 行列转换
  • C#DataGridView行列转换的具体实现
    目录初始表格 需要进行行列转置 转换后的效果 实现代码如下 void InitTable() { var dataTable = new...
    99+
    2023-02-07
    C# DataGridView行列转换 C#datagridview行列
  • oracle行列转换
    第一种是利用的decode,很普通的一种写法:select sname,sum(decode(course,'语文',score,0)) "语文",sum(decode(course,'数学',s...
    99+
    2022-10-18
  • 行列转换_wmsys.wm_concat
    需求描述loc_sys_busi_strategy是纵表,需转换成横表方便Redis QUEUE处理。 源数据格式 需求格式  注意其中speed,area...
    99+
    2022-10-18
  • SQLServer使用PIVOT与unPIVOT实现行列转换
    一、sql行转列:PIVOT 1、基本语法: create table #table1 ( id int ,code varchar(10) , name v...
    99+
    2022-11-13
  • Mysql学习——行与列的多种转换
    目录 一、行转列 二、列转行 三、多列转一行 四、一行转多列 五、行转列的其案例 首先准备一张表 CREATE TABLE CJ( Name varchar(32), Subject varchar(...
    99+
    2023-09-01
    sql 数据库
  • mysql 列转行
    一、列转行 mysql 数据库中,我们可能遇到将数据库中某一列的数据(多个值,按照英文逗号分隔),转化为多行数据(即一行转多行),然后join关联表,再转化为一行数据 如:有两张表,一用户表,一张学科表,需要查询学科表中的用户姓名 用...
    99+
    2023-08-31
    mysql 数据库 sql
  • mysql 行转列
    以下是其中比较常见的几种方法: 使用GROUP_CONCAT函数 可以使用GROUP_CONCAT函数将多行数据合并为一行,并以逗号或其他分隔符进行分隔。通过SELECT语句和GROUP BY子句,可以将数据行转换为列。具体语法如下...
    99+
    2023-08-20
    mysql 数据库 sql
  • SQL如何实现行转列和列转行
    这篇文章给大家分享的是有关SQL如何实现行转列和列转行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005...
    99+
    2022-10-18
  • python如何实现Excel多行多列的转换
    今天小编给大家分享一下python如何实现Excel多行多列的转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、使用需求...
    99+
    2023-07-05
  • 【SQL应知应会】行列转换(二)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 行列转换 • Mys...
    99+
    2023-08-25
    mysql adb 数据库 大数据 oracle 数据分析
  • MySQL中怎么实现行转列操作
    本篇文章给大家分享的是有关MySQL中怎么实现行转列操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  表的基本结构  改造前表结构:  C...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作