MySQL行转列实现和总结

MySQL行转列实现和总结一、行转列实例1、准备数据CREATETABLEtb(`cname`VARCHAR(10),courceVARCHAR(10),scoreINT)ENGINE=INNODB;INSERTINTOtbVALUES(‘张三’,’语文’,74);INSERTINTOtbVALUES(‘张三’,’数学’,83);INSERTINTOtbVALUES(‘张三’,’物理…

大家好,又见面了,我是你们的朋友全栈君。

一、行转列实例

1、准备数据

CREATE TABLE tb(`cname` VARCHAR(10),cource VARCHAR(10),score INT) ENGINE=INNODB; INSERT INTO tb VALUES('张三','语文',74); INSERT INTO tb VALUES('张三','数学',83); INSERT INTO tb VALUES('张三','物理',93); INSERT INTO tb VALUES('李四','语文',74); INSERT INTO tb VALUES('李四','数学',84); INSERT INTO tb VALUES('李四','物理',94); 

最终想要的结果是这样:

| 姓名 | 语文 | 数学 | 物理 | +------+--------+--------+----+ | 张三 | 74.00 | 83.00 | 93.00 | | 李四 | 74.00 | 84.00 | 94.00 | 

2、利用SUM(IF()) 生成列

SELECT cname AS "姓名", SUM(IF(cource="语文", score, 0)) AS "语文", SUM(IF(cource="数学", score, 0)) AS "数学", SUM(IF(cource="物理", score, 0)) AS "物理" FROM tb GROUP BY cname 
张三  74  83  93
李四  74  84  94

3,利用max(CASE … WHEN … THEN .. ELSE END) AS “语文”的方式来实现

 SELECT cname AS "姓名", MAX(CASE cource WHEN "语文" THEN score ELSE 0 END) AS "语文", MAX(CASE cource WHEN "数学" THEN score ELSE 0 END) AS "数学", MAX(CASE cource WHEN "物理" THEN score ELSE 0 END) AS "物理" FROM tb GROUP BY `cname` 
张三  74  83  93
李四  74  84  94

4、分析

  • 原有的数据是这样的:
cname cource score
张三  语文  74
张三  数学  83
张三  物理  93
李四  语文  74
李四  数学  84
李四  物理  94
  • 想变成这样:
姓名    语文  数学  物理
张三  74  83  93
李四  74  84  94

暂且将原先的表称为A,之后的称为B,A想成为B,主要是讲A表中cource列中的行数据变为列,抠除行转列的语法之外,使用了GROUP BY cname进行分组,A表的业务主键是cname和cource,这是一个联合主键。

SELECT * FROM tb GROUP BY cname

张三  语文  74
李四  语文  74
  • 总结一:行转列,分组(GROUP BY)的列必须是除需要行转列之外的业务主键。
    例如tb表中业务主键应该是cname和cource,但是cource需要进行行转列,所以需要按照cname分组。

这里的字段比较少,体现的不明显,可以在tb表的基础上再加一列,性别:

cname cource score gender
张三  语文  74  男
张三  数学  83  男
张三  物理  93  男
李四  语文  74  男
李四  数学  84  男
李四  物理  94  男
张三  语文  80  女
张三  数学  80  女
张三  物理  80  女

这时候业务主键是cname,cource,gender,要向进行行转列,SQL应该是这样的:

SELECT cname AS "姓名", gender AS "性别", MAX(CASE cource WHEN "语文" THEN score ELSE 0 END) AS "语文", MAX(CASE cource WHEN "数学" THEN score ELSE 0 END) AS "数学", MAX(CASE cource WHEN "物理" THEN score ELSE 0 END) AS "物理" FROM tb GROUP BY `cname`, gender 
  • 显示结果是:
张三  女   80  80  80
张三  男   74  83  93
李四  男   74  84  94

如果还是以cname分组,结果会是这样:

张三  男   80  83  93
李四  男   74  84  94
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131581.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • STL之nth_element()(取容器中的第n大值)

    STL之nth_element()(取容器中的第n大值)

    2022年1月29日
    42
  • 如何关闭笔记本小键盘_笔记本电脑怎么关键盘灯光

    如何关闭笔记本小键盘_笔记本电脑怎么关键盘灯光2016-12-0815:00:40您使用下面两个方法,都可以用来关闭触摸板:(1)请您“双击”触摸板左上角位置的小圆点,当指示灯为橙色时,表示触摸板关闭。(2)或者,请您点击开始—控制面板—鼠标—装置设…2017-01-0116:08:43笔记本的小键盘区一般是在右手边的字母区,是蓝色字的。和台式机一样,笔记本也是有一个NUMLOCK键的。就是小键盘区的开关(一般也是蓝…

    2022年9月19日
    3
  • Win10安装Ubuntu18.04双系统,图文详解,全网最详细教程

    Win10安装Ubuntu18.04双系统,图文详解,全网最详细教程博主经历过多次双系统的安装与卸载,所以这次安装就记录下全过程,能让后面的同学少走弯路。安装目录一、查看电脑信息1、BIOS模式2、硬盘数二、制作系统盘1、下载镜像源2、制作U盘启动盘三、分配硬盘空间四、安装Ubuntu18.041、进入U盘引导项2、安装设置一、查看电脑信息1、BIOS模式Win+R,输入msinfo32回车,出现系统界面,可查看BIOS模式:本教程只适合BIOS模式为UEFI的电脑,如果BIOS模式为传统的,请查看其他对应教程。2、硬盘数此电脑——>磁盘管理,可以.

    2022年7月24日
    6
  • 标准化与归一化公式是什么_数据标准化和归一化的意义

    标准化与归一化公式是什么_数据标准化和归一化的意义标准化与归一化公式

    2022年10月11日
    4
  • 倒立摆matlab仿真_控制系统设计实例

    倒立摆matlab仿真_控制系统设计实例本文的研究内容及安排如下:第一章是对倒立摆系统的介绍和分析,简要介绍了对倒立摆系统研究的历程,并对倒立摆系统进行建模,推倒出了倒立摆系统的状态空间表达式;第二章简要介绍了模糊控制的基本原理;第三章简要介绍了BP神经网络;第四章分别用常规PID、最优控制理论以及神经网络模糊控制实现了对倒立摆系统的控制,并对倒立摆系统的响应结果进行比较;第五章是结论,对论文做了总结,并提出了存在的一些问题。本论文研究…

    2022年8月18日
    7
  • 计算机三级-数据库技术

    计算机三级-数据库技术三级数据库技术知识点总结1数据字典是对系统种各类数据描述的集合,包括数据项,数据结构,数据流,数据存储和处理过程五个部分2数据模型的三要素:数据结构、数据操作和完整性约束3数据库系统:一般由数据库、操作系统、数据库管理系统(及其工具)、应用系统、数据库管理人员和用户构成4数据模型:数据模型是数据库系统的数学形式框架,是数据库系统的核心和基础5数据模型的分类:概念模型,也称信息…

    2022年6月18日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号