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慢很多;

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Opencv学习笔记(六)SURF学习笔记

    Opencv学习笔记(六)SURF学习笔记

    2021年12月15日
  • mysql 找不到或无法加载已注册的 .Net Framework Data Provider。

    mysql 找不到或无法加载已注册的 .Net Framework Data Provider。mysql 找不到或无法加载已注册的 .Net Framework Data Provider。

  • aspice培训试题(软件测试教程)

    软件详细设计在ASPICE中代号是SWE3,处于V模型的左侧;软件测试则包含软件单元测试(SWE4),软件集成测试(SWE5)以及软件合格性测试(SWE6)三部分,处于V模型的右侧。下面我会比较详细地介绍一下各过程域的实施要点和迎审会面对的主要问题。软件详细设计软件详细设计要准备的第一份交付件就是:软件详细设计文档!文档的输入是软件的需求,内容应该涵盖数据结构定义,全局变量和宏定义描述,动态行为描述(任务/中断/需求方案分析等),每个函数的实现(输入/输出/返回/伪码等),详细设计评估(关键性、复杂

  • 电机控制foc算法讲解_电机算法需求

    电机控制foc算法讲解_电机算法需求最近做完了一个直流无刷电机的电机调速项目,查阅了各种大神所写的博客和论文,在这里我只做一下小小的总结;FOC(FiledOrientedControl)是采用数学方法实现三相马达的力矩与励磁的解耦控制。主要是对电机的控制电流进行矢量分解,变成励磁电流IdIdId和交轴电流IqIqIq,励磁电流主要是产生励磁,控制的是磁场的强度,而交轴电流是用来控制力矩,所以在实际使用过程中,我们常…

  • 在Windows 8.1及IE 11中如何使用HttpWatch

    在Windows 8.1及IE 11中如何使用HttpWatch

  • CSS画猪

    效果查看:http://hovertree.com/texiao/css3/6/CSS3画猪头:http://hovertree.com/texiao/css3/6/1/代码如下:转自:htt

    2021年12月22日

发表回复

您的电子邮箱地址不会被公开。

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