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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UVA11294-Wedding(2-SAT)

    UVA11294-Wedding(2-SAT)

    2022年1月4日
    35
  • goland激活3月最新在线激活

    goland激活3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    46
  • 2021编程语言排行榜出炉

    2021编程语言排行榜出炉今日,IEEESpectrum发布了2021年度编程语言排行榜,其中Python在总榜单以及其他几个分榜单中依然牢牢占据第一名的位置。另外值得关注的是微软C#语言,它的排行从2020年的第23名跃升至了今年的第6名,称得上是今年的大势语言。2021年度编程语言排行榜依然从8个信息源按照11种指标收集数据,最终得到了数十种编程语言流行度的整体排名。这8个信息源分别为CareerBuilder、GitHub、Google、HackerNews、IEEE、Reddi

    2022年7月15日
    13
  • &0xff的原因

    &0xff的原因&0xff的目的

    2022年6月19日
    23
  • 什么是pisa测试_PISA测试真相:哪些学校代表中国考取第一名

    什么是pisa测试_PISA测试真相:哪些学校代表中国考取第一名原标题:PISA测试真相:哪些学校代表中国考取第一名在北京金融行业工作的王鑫如,去年女儿出生后就开始规划送她去哪里接受教育,留在北京,还是随着一个工作机会去香港,或者全家移民国外?她说,将来女儿读大学很大可能会去国外,但基础教育阶段有没有必要出去?中国的基础教育竞争力到底强不强?大学有各种国际排行榜单,不同国家的中小学质量要如何对比?12月3日公布的第七轮国际学生评估结果(Programmefor…

    2022年5月3日
    52
  • java开发后端框架_java开发后端框架[通俗易懂]

    java开发后端框架_java开发后端框架[通俗易懂]1java开发后端框架java从推出到现在技术不断发展,语言也优化的越来越好,对于java工程师来说技术的不断发展,他们需要不断学习java进阶,而对于新手来说就能从基础到核心。那么新手该怎么学习呢?下面小编给大家说说java开发后端框架,希望能对你有些帮助。Struts在项目中的作用Struts在项目主要起控制作用,只要用于web层(即视图层和控制层)Struts本身是使用典型的MVC结构实现…

    2022年5月1日
    50

发表回复

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

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