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)
上一篇 2022年6月14日 上午9:16
下一篇 2022年6月14日 上午9:16


相关推荐

  • Windows部署WSUS补丁服务器

    Windows部署WSUS补丁服务器WSUS 全称 Windowsserve 是微软在其网络结构中提供的关于系统补丁更新的一个解决方案 完全免费 现在最新的版本是 WSUS3 0SP2 在生产环境中部署 WSUS 的应用价值主要是提高网络资源的利用率 节省带宽 同时对于客户端计算机来说呢 更新效率也更高一些 在日常大家都习惯了用第三方工具给系统打补丁 局域网的 PC 数量少了便罢 如果多于 50 台 只是给系统以及微软产品打补丁这一项工作对于网络资源的占用就不可小觑 在 Windowsserve 以前

    2026年3月19日
    2
  • 10个精选国外免费空间

    10个精选国外免费空间最近想申请一个免费空间 发现国内基本没有 唉 nbsp nbsp nbsp nbsp 10 个精选国外免费空间推荐 2011 09 2911 45 如果你正在寻找免费空间建立你自己的小洞 可以试试以下免费空间 nbsp 以下国外免费空间均有本人亲自测试过 所以推荐 不太好的就没有推荐 但本人是在日本测试 以下网站申请无需代理 都可以正常

    2026年3月26日
    1
  • pycharm连接mysql数据库代码_myeclipse连接数据库

    pycharm连接mysql数据库代码_myeclipse连接数据库PyCharm是一款常用的Python开发的软件,这里给大家介绍一下如何在PyCharm如何连接MySQL数据库。首先,我们需要找到页面中的DataBase窗口,一般在页面的右侧,没有显示的话,可以点击View->ToolWindows->DataBase。然后显示DataBase之后,我们点击DataBase。然后我们点击DataBase的这个+号。然后选择DataSource->MySQL。然后就显示到连接的页面,如果是第一次连接的时候,就需要点击下面的D

    2022年8月27日
    4
  • Vue安装Vue Devtools调试工具提示 Error: Cannot find module ‘@vue-devtools/build-tools’ 解决办法

    Vue安装Vue Devtools调试工具提示 Error: Cannot find module ‘@vue-devtools/build-tools’ 解决办法我看网络上面安装 VueDevtools 调试工具的步骤几乎都是按照文章链接里的步骤进行安装 安装链接详情但是在最终执行编译命令的时候 npmrunbuild 提示如下错误 尝试了很多方法 都不能解决改问题 为了能够在谷歌浏览器上安装 vue 调试工具 通过下面步骤最终把 Vue 的调试工具安装成功 步骤一 访问该地址 vue 调试工具插件 下载 vue 调试

    2026年3月19日
    2
  • c++int转换成char_字符数字转为int型

    c++int转换成char_字符数字转为int型1.通过ascii码:chara=’0′;intia=(int)a;/*notethattheintcastisnotnecessary–intia=awouldsuffice*/cout<<ia<<endl;结果如下:可以看出这种方法得到的其实是char对应的ascii码。因为ascii码…

    2022年10月2日
    10
  • Exhibitor(zookeeper监控工具)[通俗易懂]

    Exhibitor(zookeeper监控工具)[通俗易懂]具体看github上的文档,很详细https://github.com/soabase/exhibitor/wiki/Running-Exhibitor一、这个是Netflix出品的一个监控工具,但实际上也很难用。。Exhibitor的主要功能监控本机的Zookeeper服务,可以自动重启挂掉的Zookeeper服务;定期备份数据;定期清理Zookeeper日志;提供了一个We…

    2025年7月4日
    5

发表回复

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

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