mysql行转列、列转行

mysql行转列、列转行mysql行转列、列转行

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

       语句不难,不做多余解释了,看语句时,从内往外一句一句剖析

行转列

       有如图所示的表,现在希望查询的结果将行转成列

1

       建表语句如下:

CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `COURSE` varchar(20) DEFAULT NULL, `SCORE` float DEFAULT '0', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE) values ("张三", "数学", 34), ("张三", "语文", 58), ("张三", "英语", 58), ("李四", "数学", 45), ("李四", "语文", 87), ("李四", "英语", 45), ("王五", "数学", 76), ("王五", "语文", 34), ("王五", "英语", 89);

       查询语句:

       此处用之所以用MAX是为了将无数据的点设为0,防止出现NULL

SELECT user_name , MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学, MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文, MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语 FROM test_tb_grade GROUP BY USER_NAME;

       结果展示:

2

列转行

       有如图所示的表,现在希望查询的结果将列成行

3

       建表语句如下:

CREATE TABLE `TEST_TB_GRADE2` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `CN_SCORE` float DEFAULT NULL, `MATH_SCORE` float DEFAULT NULL, `EN_SCORE` float DEFAULT '0', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into TEST_TB_GRADE2(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) values ("张三", 34, 58, 58), ("李四", 45, 87, 45), ("王五", 76, 34, 89);

查询语句:

select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2 union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2 union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2 order by user_name,COURSE;

       结果展示:

4

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

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

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


相关推荐

  • 中国程序员第一人(目前世界第一首富是谁)

    过去的20年是程序员快意恩仇的江湖时代通过代码,实现梦想和财富有人痴迷于技术,做出一夜成名的产品有人将技术变现,创办企业成功上市这些早一代的程序员们创造的奇迹引发了一浪高…

    2022年4月10日
    99
  • 一个好玩的小游戏(纯C语言编写)

    一个好玩的小游戏(纯C语言编写)最近在看知乎是发现了一个这一个专栏https://zhuanlan.zhihu.com/c2game从中获取的许多知识,本文中的游戏也是从里面学到的,不过本人又自己加了一些功能。这是一个类似于飞机大战的游戏,不过目前代码量比较小,所以看起来非常简陋游戏界面如下更新日志,本人将原来的原来的代码有进一步的优化了一下,之前是只有一个非常小的战机现在更新后可以产生一个非常大的战机(看起来也更

    2022年5月19日
    44
  • AWVS工具介绍[通俗易懂]

    AWVS工具介绍[通俗易懂]AWVS基本操作  AWVS工具在网络安全行业中占据着举足轻重的地位,作为一名安全服务工程师,AWVS这款工具在给安全人员做渗透测试工作时带来了巨大的方便,大大的提高了工作效率。AWVS工具介绍  AcunetixWebVulnerabilityScanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞。它包含有收费和免…

    2022年4月19日
    60
  • Java开发人员必须掌握的Linux命令(一)

    子曰:“工欲善其事,必先利其器。“1、登录服务器SSH命令简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最基本的用法:常用格式:ssh [-l login_name] [-p port] [user@]hostname例子:ssh 192.168….

    2022年2月28日
    45
  • 硬盘恢复分区_windows恢复分区

    硬盘恢复分区_windows恢复分区配置RedFlagLinux4.0分区(转)  对很多用户来讲,安装Linux系统最麻烦的就是创建Linux分区了!在下文中,笔者将告诉安装程序要在哪里安装系统,即为将要安装RedFlagLinuxDes…

    2022年8月22日
    9
  • PyCharm设置Python版本

    PyCharm设置Python版本PyCharm默认会使用虚拟的Python解释器,即使没有安装也能够运行Python代码,但有强迫症的程序员一定不能忍受Project中存在这么多的文件目录。设置Python版本File->Settings->Project->ProjectInterpreter,设置本地安装的Python解释器版本创建Python工程创建工程时,选择Existin…

    2022年5月8日
    77

发表回复

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

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