行转列及列转行查询

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

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

数据库表中的内容:

转换后:

解析:

  行转列是将原来的subject字段的多行内容选出来,作为结果集中的不同列,并根据code进行分组显示对应的score


 mysql> select s.name 姓名,s.code 学号,

    -> sum(if(e.subject='语文',e.score,0)) 语文成绩,

    -> sum(if(e.subject='数学',e.score,0)) 数学成绩,

    -> sum(if(e.subject='英语',e.score,0)) 英语成绩

    -> from student s

    -> left join exam e

    -> on s.code=e.code

    -> group by s.code;


  ①sum()函数是为了能够使用group by根据code进行分组,因为每一个student.code对应的exam.subject='语文'的记录只有一条,所以sum()的值就等于对应那一条记录的exam.score的值。

  (正常情况下此记录都是只有一条,当然如果有多条的话,可以使用sum()、max()、avg()、min()等聚合函数也都可以达到行转列的效果)

  ②if(e.subject='语文',e.score,0)作为条件,即对所有经过group by s.code分组的e.subject='语文'的记录的e.score字段进行SUM()、MAX()、MIN()、AVG()操作,如果e.score没有值则默认为0。

  (当然使用case when then作为条件进行信息提取也是OK的)

 

二、列转行:将sid的每个科目分数分散成一条记录显示

数据库中的表:

转换后:

解析:

    使用union all将每个sname对应的多个科目的成绩的结果集加起来


 mysql> select sname,sid,'语文' as subject,语文 as score from transcript

    -> union all

    -> select sname,sid,'数学' as subject,数学 as score from transcript

    -> union all

    -> select sname,sid,'英语' as subject,英语 as score from transcript

    -> order by sname; 


 UNION与UNION ALL的区别:

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

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

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

转载于:https://www.cnblogs.com/geaozhang/p/6758364.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端系列讲解之字体单位

移动端字体单位有哪些?他们的兼容性如何?他们的特点?1.移动端字体单位现在主要有 em 、rem 、px 2.兼容性请传送点击这里 em: em是相对长度单位。相对于父元素设置的字体大小。em相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸…

x264_param_t参数注解

typedef struct x264_param_t { CPU 标志位 unsigned int cpu; int i_threads; 并行编码多帧 int b_deterministic; 是否允许非确定性时线程优化 int i_sync_lookahead; 线程超前缓冲 视频属性 int i_width; 宽度 int i_height; 高…

gen_circle_contour_xld创建圆或圆弧的XLD轮廓

目录gen_circle_contour_xld(算子)描述参数gen_circle_contour_xld(算子) gen_circle_contour_xld - 创建圆或圆弧的XLD轮廓。 gen_circle_contour_xld(:ContCircle:Row,Column&am…

一、Java语言基础(4)_方法和数组——数组

2018-04-25 不悔梦归处,只恨未尽心 数组 一、一维数组 数组的含义:具有相同类型的多个变量按有序形式组织起来的数据形式。(数组是用来存储固定大小的同类型元素。)数组的定义:方式1(推荐使用)&…

http header 具体解释

HTTP(HyperTextTransferProtocol)即超文本传输协议,眼下网页传输的的通用协议。HTTP协议採用了请求/响应模型,浏览器或其它client发出请求,server给与响应。就整个网络资源传输而言,包含message-header和me…

研究生开题报告需要注意的几点

1 毕业论文选题的原则 毕业论文选题一般要求满足以下原则: ①开拓性:前人没有专门研究过或虽已研究但尚无理想的结果,有待进一步的探讨和研究,或是学术界有分歧,有必要深入研究探讨的问题;…

create_metrology_model创建测量几何形状所需的数据结构(原理)

目录create_metrology_model(算子)描述二维计量的基本原理创建计量模型数据结构提供近似值修改模型参数修改对象参数对齐计量模型应用测量访问结果清理记忆注意参数create_metrology_model(算子) create_metrology_model - 创建测…

X264码率控制流程分析

码率控制的理论知识:码率控制的目的和意义:图像通信中码率控制的目的:通过调节编码参数,控制单位时间内的编码视频流的数据量,以使产生的比特流符合各种应用的需求。视频压缩的效率和视频内容有很大的关系,…

STL-list

#include "stdafx.h"#include<iostream>#include<string>#include<vector>//vector向量容器#include<deque>#include<list>#include<algorithm>using namespace std;/* list介绍 list容器实现了双向链表的数据结构&#xff0c;数…

Java微信二次开发(九)

多媒体文件上传与下载 第一步&#xff1a;找到包com.wtz.vo&#xff0c;新建类WeixinMedia.java 1 package com.wtz.vo;2 3 /**4 * author wangtianze QQ:8646200125 * date 2017年4月25日 上午11:10:316 * <p>version:1.0</p>7 * <p>descri…

add_metrology_object_generic将测量对象添加到计量模型中

目录add_metrology_object_generic&#xff08;算子&#xff09;描述可能的形状测量区域的定义通用参数参数add_metrology_object_generic&#xff08;算子&#xff09; add_metrology_object_generic - 将计量对象添加到计量模型中。 add_metrology_object_generic&#xff…

关于发那科机器人的FSSB

&#xfeff;&#xfeff;FSSB是指fanuc Serial Servo Bus&#xff0c;即发那科串行伺服总线&#xff08;光缆&#xff09;&#xff0c;连接CNC与伺服放大器。HSSB是指High-Speed Serial Bus&#xff0c;即高速串行总线&#xff08;光缆&#xff09;&#xff0c;连接CNC与外部P…

H264规定了三种主要档次

H264规定了三种主要档次&#xff0c;每个档次支持一组特定的编码功能&#xff0c;并支持一类特定的应用。 1、基本档次&#xff08;Baseline Profile&#xff09;&#xff1a;利用I片和P片支持帧内和帧间编码&#xff0c;支持利用基于上下文的自适应的变长编码进行的熵编码&…

get_metrology_object_result 获取计量模型的测量结果

目录get_metrology_object_result&#xff08;算子&#xff09;描述result_type&#xff1a;获取所有参数&#xff1a;获取特定参数&#xff1a;获得分数&#xff1a;used_edges&#xff1a;行&#xff1a;列&#xff1a;振幅&#xff1a;angle_direction&#xff1a;参数get_m…

iOS开发UI篇—字典转模型

一、能完成功能的“问题代码” 1.从plist中加载的数据 2.实现的代码 1 //2 // LFViewController.m3 // 03-应用管理4 //5 // Created by apple on 14-5-22.6 // Copyright (c) 2014年 heima. All rights reserved.7 //8 9 #import "LFViewController.h" 10 11 i…

Codechef:Path Triples On Tree

Path Triples On Tree 题意是求树上都不相交或者都相交的路径三元组数量。 发现blog里没什么树形dp题&#xff0c;也没有cc题&#xff0c;所以来丢一道cc上的树形dp题。 比较暴力&#xff0c;比较恶心 #include<cstdio> #include<algorithm> #define MN 300001 #de…

grbl

第一次发帖...之前上论坛都是查资料的&#xff0c;发现gcode这一块资料比较少先说一下Gcode:Gcode在工业控制上用的很多&#xff0c;是一种通用的控制指令&#xff0c;数控机床上经常用&#xff0c;在我diy雕刻机&#xff08;打印机之类的&#xff09;的时候要用到&#xff0c;…

mybitis实现增,删,改,查,模糊查询的两种方式:(2)

方式二&#xff1a;mapper代理接口方式 这种方式只需要xml接口&#xff08;不用写实体类&#xff09;但是需要符合三个规范 使用mapper代理接口方式在同一目录下&#xff08;可以创建一个源文件夹&#xff0c;达到类文件和xml文件分类的作用&#xff09;xml中namespace&#xf…

C语言中的静态函数的作用

转载 在C语言中为什么要用静态函数(static function)&#xff1f;如果不用这个static关键字&#xff0c;好象没有关系。那么&#xff0c;用了static以后&#xff0c;有什么作用呢&#xff1f;我们知道&#xff0c;用了static的变量&#xff0c;叫做静态变量&#xff0c;其意义是…

[转] sql server 跨数据库调用存储过程

A库存储过程&#xff1a; create PROCEDURE [dbo].[spAAAForTest] ( UserName nvarchar(20) null ,LoginPwd nvarchar(60) null ) AS BEGINselect NA AS a, NB AS B, NC AS C;END 同一台服务器实例&#xff0c;A&#xff0c;B两个数据库&#xff0c;…