mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现。

行转列

行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作,看着更直观,一目了然。

  

建表语句:

 CREATE TABLE `st_grade` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`stu_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`course` varchar(20) DEFAULT NULL,
`score` float(4,1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

插入数据:

 INSERT INTO `st_grade` VALUES ('', '张三', '语文', '86.0');
INSERT INTO `st_grade` VALUES ('', '张三', '数学', '90.0');
INSERT INTO `st_grade` VALUES ('', '张三', '英语', '75.0');
INSERT INTO `st_grade` VALUES ('', '李四', '语文', '92.0');
INSERT INTO `st_grade` VALUES ('', '李四', '数学', '93.0');
INSERT INTO `st_grade` VALUES ('', '李四', '英语', '96.0');
INSERT INTO `st_grade` VALUES ('', '王五', '语文', '82.0');
INSERT INTO `st_grade` VALUES ('', '王五', '数学', '71.0');
INSERT INTO `st_grade` VALUES ('', '王五', '英语', '74.0');

查询语句:

 select stu_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 st_grade
group by stu_name;

列转行


列转行的话,就是将一条列数据转换为一条一条的行数据记录展示,将某一行数据根据某些列进行分组操作。

建表语句:

 CREATE TABLE `st_grade` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`stu_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`course` varchar(20) DEFAULT NULL,
`score` float(4,1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

插入语句:

 INSERT INTO `st_grade` VALUES ('', '张三', '语文', '86.0');
INSERT INTO `st_grade` VALUES ('', '张三', '数学', '90.0');
INSERT INTO `st_grade` VALUES ('', '张三', '英语', '75.0');
INSERT INTO `st_grade` VALUES ('', '李四', '语文', '92.0');
INSERT INTO `st_grade` VALUES ('', '李四', '数学', '93.0');
INSERT INTO `st_grade` VALUES ('', '李四', '英语', '96.0');
INSERT INTO `st_grade` VALUES ('', '王五', '语文', '82.0');
INSERT INTO `st_grade` VALUES ('', '王五', '数学', '71.0');
INSERT INTO `st_grade` VALUES ('', '王五', '英语', '74.0');

查询语句:

 select stu_name, '语文' course , cn_score as score
from st_grade2
union select stu_name, '数学' course, math_score as score from st_grade2
union select stu_name, '英语' course, en_score as score from st_grade2
order by stu_name,course;

以上代码可以直接复制来验证,没有错误。

mysql之行转列与列转行的更多相关文章

  1. mysql 多行(GROUP_CONCAT)和多列(CONCAT)的合并函数

    1,多行合并:把查询的一行或者多行进行合并. SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id ...

  2. mysql行转列,列转行

    行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清 ...

  3. SQL行转列与列转行(转)

    原文: http://blog.csdn.net/jx_870915876/article/details/52403472 add by zhj: 本文是以MySQL为例说明的,但其实它适用于所有关 ...

  4. 关于MySQL的行转列的简单应用(二)---group函数

    MySQL的行转列.列转行.连接字符串  concat.concat_ws.group_concat函数用法使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一 ...

  5. 做图表统计你需要掌握SQL Server 行转列和列转行

    说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...

  6. MYSQL 多行转多列

    mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一 ...

  7. oracle 行转列、列转行

    最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle  列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ...

  8. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  9. SQLServer处理行转列和列转行

    掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 ...

随机推荐

  1. 你真的了解foreach吗?

    引言 有C#基础的,当问到循环有哪些,会毫不犹豫的说出的for.do while.foreach及while这几种,但是到具体实际开发中,我们遇到一些问题,比如:到底选择哪种?为什么选择这种?哪种好像 ...

  2. JS 输出指定范围内的随机数

    /* 自定义函数 */ function GetRandomNum(Min,Max){ var Range = Max - Min; var Rand = Math.random(); return( ...

  3. metronic 表格插件 datatables

    官方网站:https://datatables.net/ css引入:datatables.min.css && datatables.bootstrap.css && ...

  4. jQuery中操作页面的文本和值

    主要是区分俩种方法: 1.html():可以识别HTML文件,将里面内容全部打印(操作双标签) 2.text():只是将里面的内容打印出来,不能识别HTML格式(操作双标签) <!DOCTYPE ...

  5. Zookeeper选取机制

    1)半数机制:集群中半数以上机器存活,集群可用.所以Zookeeper适合安装奇数台服务器. 2)Zookeeper虽然在配置文件中并没有指定Master和Slave.但是,Zookeeper工作时, ...

  6. cd732D Exams 二分

    题目:http://codeforces.com/problemset/problem/732/D 题意:给你n,m,n个数,m个数,n天,m场考试,给出n天每天能考第几场考试(如果是0则那天考不了试 ...

  7. UESTC1977-图书馆(AC自动机应用)

    M - 图书馆 Time Limit: 2000 MS     Memory Limit: 256 MB Submit Status 电子科技太学图书馆创建于1956年,馆舍总面积66974平方米,各 ...

  8. numpy的基本API(一)——创建

    numpy的基本创建API iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.np.empty([a, b]) empty方法可以在无需初始化的情况下创建认 ...

  9. 分布式监控告警平台Centreon快速使用

    一. Centreon概述 Centreon是一款功能强大的分布式IT监控系统,它通过第三方组件可以实现对网络.操作系统和应用程序的监控:首先,它是开源的,我们可以免费使用它:其次,它的底层采用nag ...

  10. k8s 开船记-修船:改 readinessProbe ,去 DaemonSet ,上 Autoscaler

    (图片来自网络) 改 readinessProbe 对于昨天 k8s 尼克号发生的触礁事故,我们分析下来主要是2个原因,一是当时4个节点不够用造成部分容器负载过高而宕机,二是 readinessPro ...