mysql 行转列

原创 2016年08月30日 17:21:20
数据准备
/** 学生表*/
CREATE TABLE tb_student(id INT,NAME VARCHAR(20));
/** 课程表  */
CREATE TABLE tb_course(id INT ,NAME VARCHAR(20));
/** 成绩表  */
CREATE TABLE tb_grade(s_id INT,c_id INT ,greade INT);

INSERT INTO tb_student(id,NAME) VALUES(1,'小明'),(2,'小马'),(3,'小朱'),(4,'小张');
INSERT INTO tb_course(id,NAME) VALUES(1,'语文'),(2,'数学'),(3,'英语'),(4,'美术');

INSERT INTO tb_grade(s_id,c_id,greade) VALUES
(1,1,80),(1,2,81),(1,3,82),(1,4,83),
(2,1,90),(2,2,91),(2,3,92),(2,4,93),
(3,1,70),(3,2,71),(3,3,72),(3,4,73),
(4,1,80),(4,2,81),(4,3,82),(4,4,83);

数据为:


行转列sql

SELECT 
    s.NAME,
    MAX(IF(c.NAME='语文',greade,0)) AS '语文',
    MAX(IF(c.NAME='数学',greade,0)) AS '数学',
    MAX(IF(c.NAME='英语',greade,0)) AS '英语',
    MAX(IF(c.NAME='美术',greade,0)) AS '美术'
FROM tb_student s
LEFT JOIN tb_grade g ON s.id = g.s_id
LEFT JOIN tb_course c ON g.c_id = c.id
GROUP BY s.NAME;
转换后数据展示:



计算学生的总成绩
SELECT  s.NAME,  SUM(g.greade) 
FROM   tb_student s 
       LEFT JOIN   tb_grade g   ON s.id = g.s_id 
       LEFT JOIN  tb_course c   ON c.id = g.c_id 
GROUP BY s.NAME ;


总成绩行转列
SELECT SUM(CASE WHEN NAME='小张' THEN gread END) AS '小张' ,
SUM(CASE WHEN NAME='小明' THEN gread END) AS '小明' ,
SUM(CASE WHEN NAME='小朱' THEN gread END) AS '小朱' ,
SUM(CASE WHEN NAME='小马' THEN gread END) AS '小马' 
FROM (
SELECT 
  s.NAME AS NAME,
  SUM(g.greade) AS gread
FROM
  tb_student s   LEFT JOIN  tb_grade g   ON s.id = g.s_id 
  LEFT JOIN  tb_course c   ON c.id = g.c_id 
GROUP BY s.NAME 
) t;
结果数据展示


动态行转列:http://www.cnblogs.com/emanlee/p/3550149.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mysql动态行转列

  • 2016-11-04 14:13
  • 33KB
  • 下载

MySQL行转列示例代码

MySQL 如何实现行转列分级输出?

概述 好久没写SQL语句,今天看到问答中的一个问题,拿来研究一下。 问题链接:关于Mysql 的分级输出问题情景简介学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列...

MySQL行转列

原文地址:http://blog.163.com/weizi_mm/blog/static/31554420122544629224/ 准备表和数据: CREATE TABLE `user` ( ...

mysql/sql多行 转 多列,行属性转列属性

经过一天的奋斗与努力,我发现我越来越佩服我自己了,真的是太NB了,请叫我大侠!多行转多列,废话不多说,开始正文:首先,参考了:http://www.cnblogs.com/kingthy/archiv...

mysql行转列(拆分字符串场景)

一对多没有建立中间表的时候经常会采用分隔符的形式将“多”存储在“一”的一个字段里,这样做的代价是无法向一对多的时候那样直接关联查询,一般采用在程序中分割后分别查询的办法
  • baokx
  • baokx
  • 2015-07-01 17:04
  • 2625

MySQL行转列案例

偶而碰到极个别有情况,需要将数据库表数据进行转列显示。可以使用case when来实现。 原数据: --创建表DROP TABLE IF EXISTS `st_class_score`...

mysql 行转列

原文链接 本文介绍的实例成功的实现了动态行转列。下面我以一个简单的数据库为例子,说明一下。数据表结构这里我用一个比较简单的例子来说明,也是行转列的经典例子,就是学生的成绩 三张表:学生表、课程表...

MySQL中关于行转列的存储过程的写法(使用游标)

-- ---------------------------- -- Procedure structure for `sp_pro_rm_cs` -- ---------------------...

mysql行转列利用case when

CREATE TABLE bill ( id CHAR(36) NOT NULL, customer INT(255) NULL DEFAULT NULL COMMENT ‘顾客’...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)