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


相关推荐

  • 【mySQL】mysql数据库分页查询讨论专题

    【mySQL】mysql数据库分页查询讨论专题MySQL:limit分页公式、总页数公式1)limit分页公式(1)limit分页公式:curPage是当前第几页;pageSize是一页多少条记录limit(curPage-1)*pageSize,pageSize(2)用的地方:sql语句中select*fromstudentlimit(curPage-1)*pageSize,pageSize;2)…

    2022年5月31日
    27
  • 【Unity3D插件】AVPro Video插件分享《视频播放插件》

    参考资料http://www.onlinedown.net/soft/987730.htmhttps://blog.csdn.net/yiwei151/article/details/78415771https://blog.csdn.net/dark00800/article/details/56015917简介AvproVideo是一款由RenderHeads出品的可以在…

    2022年4月17日
    77
  • 网站访问人数太多,怎么才能进入_网址挖掘

    网站访问人数太多,怎么才能进入_网址挖掘老规矩,先上代码:#coding=utf-8importosimportrequestsimporttimefromPILimportImagefromioimportBytesIOfromlxmlimportetree#先定义一个opener函数:defopen_mn_web(url):try:headers=…

    2025年7月5日
    3
  • Mac录屏转GIF「建议收藏」

    Mac录屏转GIF「建议收藏」首先使用QuickTimePlayer录屏,软件如下:使用方法:1.点击【新建屏幕录制】2.点击录制按钮,可以自行选定特定区域,也可以录制整个屏幕,自己设置3.完成之后,电脑顶部右边有结束按钮存储到需要的位置,下面开始转GIF所需工具:python和两个包:首先控制台检查版本,控制台先后输入:python3-Vpip3-V没有的先下载,有的话太低了自行升级安装需要的两个包:先安装:pip3installrequests-i再安装:pip3install

    2022年9月24日
    4
  • 在图像的傅里叶变换中,什么是基本图像_傅立叶变换

    在图像的傅里叶变换中,什么是基本图像_傅立叶变换从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换。它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。 傅立叶变换属于调和分析的内容。”分析”二字,可以解释为深入的研究。从字面上来看,”分析”二字,实际就是”条分缕析”而已。它通过对函数的”条分缕析”来达到对复杂函数的深入理解和研究。从哲学上看

    2022年8月30日
    7
  • filter pitcher是什么意思_EncodingFilter

    filter pitcher是什么意思_EncodingFilterorg.apache.struts2.dispatcher.FilterDispatcher是Struts2的主要的Filter,负责四个方面的功能:       (1)执行Actions       (2)清除ActionContext       (3)维护静态内容       (4)清除request生命周期内的XWork的interceptors   另注:该

    2022年8月16日
    4

发表回复

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

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