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


相关推荐

  • pytest指定用例_文件夹排列顺序自定义

    pytest指定用例_文件夹排列顺序自定义前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

    2022年7月29日
    4
  • 虚拟机CentOS系统没有UNIX2dos或dos2UNIX命令的解决方案(参考各路大佬后的总结)

    虚拟机CentOS系统没有UNIX2dos或dos2UNIX命令的解决方案(参考各路大佬后的总结)首先申明一下,只是本人在该问题上遇到的弯路,再通过查看各路大佬的方法总结出来的解决方法:因为是看到了这篇文章https://blog.csdn.net/w616589292/article/details/38274475,然后我就走上了我的弯路了,下载了hd2u-1.0.0.tgz还有popt-1.8-1.x86_64.rpm 配置好了一切发现没有一点卵用。然后我又看见了这篇文章http:/…

    2022年5月18日
    34
  • html5开发手机端网页(移动端web开发的几种方式)

    最近一直在研究移动手机网站的开发,发现做手机网站没有想象中的那么难。为什么会这么说呢?我们试想下:我们连传统的PC网站都会做,难道连一个小小的手机网站难道都搞不定吗?其实手机网站就是一个微缩版的PC网站罢了!至于为什么觉得难、觉得无从下手。段亮觉得有以下几点:一、没有完整的思路和流程就像做网站的流程一样,如果你能知道它的流程,我相信就不会觉得做手机网站难!真正难的是你没有思

    2022年4月18日
    51
  • typescript web_jenkins自动编译

    typescript web_jenkins自动编译前言上一篇我们讲到如何手动编译TypeScript,如果我们每次都要手动编译,那么这样会很累,接下来就介绍自动编译TypeScript。mac自动编译typescript在Typescript文

    2022年8月7日
    8
  • windows vim配置_配置vim

    windows vim配置_配置vimwin10设置vim配置文件进入vim安装目录(C:\Development\Vim\),后打开_vimrc文件在文件末添加需要设置的内容 setnu”设置行号 setnobackup”不保存备份文件 setnoundofile”不保存undo文件 setlines=35columns=140”设置窗口大小 (持续更新)…

    2022年9月28日
    3
  • 安装centos6.5 i686,安装vnc,配置中文界面

    安装centos6.5 i686,安装vnc,配置中文界面1.1、安装vmwaretools可以调节屏幕分辨率,同时把时间自动同步到宿主机的时间1.2、重启后修改分辨率,修改运行级别为3,然后重启开机启动图形模式(5)、文本模式(3),文本模式没有xwindow运行,图形模式即使切换到文本模式控制台,xwindow仍然运行1.3、修改网络配置cateth0的配置文件时,dhcp的,但是ifconfigeth0没有ip

    2022年5月24日
    36

发表回复

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

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