mysql行转列简单例子_mysql行转列、列转行示例[通俗易懂]

mysql行转列简单例子_mysql行转列、列转行示例[通俗易懂]最近在开发过程中遇到问题,需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示。借此机会,在网上查阅了相关方法,现总结出一种比较简单易懂的方法备用。一、行转列:将原本同一列下多行的不同内容作为多个字段,输出对应内容。效果图:数据库表中的内容:转换后:可以看出,这里行转列是将原来的f_subject字段的多行内容选出来,作为结果集中的不同列,并根据f_…

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

最近在开发过程中遇到问题,需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示。

借此机会,在网上查阅了相关方法,现总结出一种比较简单易懂的方法备用。

一、行转列:将原本同一列下多行的不同内容作为多个字段,输出对应内容。

效果图:

数据库表中的内容:

95c2622b8c15bb3d8583c7eaeb66fda1.png

转换后:

28036e02aba4ac6ed0e534e1503eb1ef.png

可以看出,这里行转列是将原来的f_subject字段的多行内容选出来,作为结果集中的不同列,并根据f_student_id进行分组显示对应的f_score;

上SQL:

selectf_student_id,SUM(IF(f_subject=’语文’,f_score,0)) as ‘语文’,SUM(IF(f_subject=’数学’,f_score,0)) as ‘数学’,SUM(IF(f_subject=’英语’,f_score,0)) as ‘英语’

fromt_student_scoreGROUP BY f_student_id;

注意点:

1.SUM()是为了能够使用GROUP BY根据f_student_id进行分组,因为每一个student_id对应的f_subject=”语文”的记录只有一条,所以SUM()的值就等于对应那一条记录的f_score的值。

假如f_student_id =’0001′ and f_subject=’语文’ 的记录有两条,则此时SUM()的值将会是这两条记录的和,同理,使用Max()的值将会是这两条记录里面值最大的一个。但是正常情况下,一个student对应一个subject只有一个分数,因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函数都可以达到行转列的效果。

2.IF(f_subject=’语文’,f_score,0)作为条件,即对所有f_subject=’语文’的记录的f_score字段进行SUM()、MAX()、MIN()、AVG()操作,如果f_score没有值则默认为0;

二、列转行:

效果图:(上面的图位置交换)

本质是将f_student_id 的每个科目分数分散成一条记录显示出来。

直接上SQL:

select f_id,f_student_id,’语文’ as f_subject,f_chinese as f_score fromt_student_subjectUNION ALL

select f_id,f_student_id,’数学’ as f_subject,f_math as f_score fromt_student_subjectUNION ALL

select f_id,f_student_id,’英语’ as f_subject,f_english as f_score from t_student_subject

这里将每个student_id对应的多个科目的成绩查出来,通过UNION ALL将结果集加起来,达到图1的效果。

附:UNION与UNION ALL的区别(摘):

1.对重复结果的处理:UNION会去掉重复记录,UNION ALL不会;

2.对排序的处理:UNION会排序,UNION ALL只是简单地将两个结果集合并;

3.效率方面的区别:因为UNION 会做去重和排序处理,因此效率比UNION ALL慢很多;

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

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

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


相关推荐

  • Android图形动画 使用ScaleAnimation

    Android图形动画 使用ScaleAnimation使用ScaleAnimation实现了一个类似于翻转的动画效果。感觉ScaleAnimation算是一个比较好用的动画类了,看了一下API感觉方法和构造方法也都很简单。就不再赘述太多直接上代码吧– 第一步:准备两张照片,放置在res/drawble下。首先在layout中写好布局文件,这里要用framelayout布局,让两张图片一张覆盖在另一张上。相信聪明的你…

    2022年8月31日
    1
  • php微信自动回复机器人,微信自动回复机器人功能怎么实现?[通俗易懂]

    php微信自动回复机器人,微信自动回复机器人功能怎么实现?[通俗易懂]原标题:微信自动回复机器人功能怎么实现?微信自动回复机器人功能怎么实现?最近有不少小伙伴都在询问这个问题。很多人在微信营销的过程中,都会有这样的问题,微信好友太多,想要都在第一时间回复,实在没有精力。下面小编就给大家分享如何使用微信自动回复机器人,大家再也不用担心回复不过来而忙的焦头烂额啦。首先通过米云微信软件,扫码将所以微信号登录,就可以将所有微信号的对话集成,全部聊天里整合了所有微信号的聊天…

    2022年10月1日
    0
  • Python Java 滑块识别-通杀滑块「建议收藏」

    Python Java 滑块识别-通杀滑块「建议收藏」遇到滑块问题在写爬虫的时候,经常会遇到滑块问题,很多次都想过尝试如何攻破滑块,但是每次都没成功,除了最开始的极验滑块,当时通过原图和滑块图的对比,能够得出缺口坐标,但是随着极验、网易、腾讯滑块的更新,已经不能够找到原图了,下面给出滑块通杀的解决方案。尝试攻破滑块在这里介绍一款通杀滑块的平台,不过需要开通VIP,VIP是永久的,可以无限次识别,我在这里开通了永久VIP,花了99RMB,平台后面也会推出点选供VIP使用。平台地址:www.51learn.vip网站名称是【无限打码】,可以直接百度到。

    2022年10月8日
    0
  • bzoj 3225: [Sdoi2008] 立方体覆盖 题解「建议收藏」

    bzoj 3225: [Sdoi2008] 立方体覆盖 题解

    2022年2月1日
    40
  • 【ZigBee协议栈简介】

    【ZigBee协议栈简介】1、Zigbee协议栈简介  协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据收发。  如图1所示:Zigbee协议分为两部分,IEEE802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;Zigbee联盟定义了NWK(网络…

    2022年5月28日
    52
  • 详解独立成分分析

    详解独立成分分析最近在学习数据降维的一些方法(有关数据降维的其他内容请看这篇文章),虽然独立成分分析不算是严格意义上的降维方法,但是它和PCA有着千丝万缕的联系,所以打算专门写一篇文章来学习ICA的相关知识,看了挺多的关于ICA的博文,有些文章讲的比较详细。有句话是这么说的:“论文是详细版的知识讲解”,也就是说如果想深入详细的了解某个知识,那么去读相关论文,所以阅读了一篇经典的ICA论文,作者是A.Hyva¨r…

    2022年5月17日
    37

发表回复

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

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