美文网首页
MySQL学习之行列转换案例

MySQL学习之行列转换案例

作者: Cehae | 来源:发表于2018-12-23 16:37 被阅读0次

前言

Oracle中的pivot/unpivot函数可以很方便的帮助我们实现行列转换,但是MySQL并不支持。
可以在SQL上想办法,比如pivot考虑用聚合函数+case when, unpiovt函数考虑用union all。

一、行转列

1-1、准备
create table wd_test(
    id int(32) not null auto_increment,
    name varchar(80) default null,
    date date default null,
    scount int(32),
    primary key (id)
);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (1,'小说','2013-09-01',10000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (2,'微信','2013-09-01',20000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (3,'小说','2013-09-02',30000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (4,'微信','2013-09-02',35000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (5,'小说','2013-09-03',31000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (6,'微信','2013-09-03',36000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (7,'小说','2013-09-04',35000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (8,'微信','2013-09-04',38000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (9,'小说','2013-09-01',80000);
INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (10,'微信','2013-09-01',70000);
图片.png
1-2、SQL实现
#行转列
SELECT 
    a.date,
    SUM(CASE a.name
        WHEN '小说' THEN a.scount
        ELSE 0
    END) 'sum_小说',
    
    MAX(CASE a.name
        WHEN '小说' THEN a.scount
        ELSE 0
    END) 'max_小说',
    
    SUM(CASE a.name
        WHEN '微信' THEN a.scount
        ELSE 0
    END) '微信',
    
    MAX(CASE a.name
        WHEN '小说' THEN a.scount
        ELSE 0
    END) 'max_微信'
FROM
    wd_test a
GROUP BY DATE;
图片.png

二、列转行

2-1、准备
CREATE TABLE wd_test2 
(
id INT(32) NOT NULL AUTO_INCREMENT,
username VARCHAR(80) DEFAULT NULL,
cn   FLOAT, 
math FLOAT, 
en FLOAT,
PRIMARY KEY (id)
) 

INSERT INTO `wd_test2` (`id`,`username`,`cn`,`math`,`en`) VALUES (1,'zhangsan',87,65,75);
INSERT INTO `wd_test2` (`id`,`username`,`cn`,`math`,`en`) VALUES (2,'lisi',78,95,81);
INSERT INTO `wd_test2` (`id`,`username`,`cn`,`math`,`en`) VALUES (3,'wangwu',97,78,91);
INSERT INTO `wd_test2` (`id`,`username`,`cn`,`math`,`en`) VALUES (4,'zhaoliu',80,55,75);
图片.png
2-2、SQL
SELECT username, '语文' AS COURSE , cn AS SCORE FROM wd_test2  
UNION SELECT username, '数学' AS COURSE, math AS SCORE FROM wd_test2  
UNION SELECT username, '英语' AS COURSE, en AS SCORE FROM wd_test2  
ORDER BY username,COURSE  
图片.png

相关文章

  • MySQL学习之行列转换案例

    前言 Oracle中的pivot/unpivot函数可以很方便的帮助我们实现行列转换,但是MySQL并不支持。可以...

  • MySQL行列转换

    score_1 score_2 RT,需求是将以上两种表样式互相转换: score_1转score_2,很简单: ...

  • 行列转换

    一行转多行 复制表格,然后右击鼠标选择转置复制 一列变多列 =IFERROR(OFFSET($A$2,IF(ROW...

  • SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。 行列转换就是如下...

  • 青椒第十五讲学习收获要点

    1.几个案例挺好 特别是运用行列式求面积,可以借用方法,同时通过平移转换成任意一点的行列式求法要比单纯的三阶行列式...

  • Hive 行列转换

    一、列转行使用函数:lateral view explode(split(column, ',')) numSQL...

  • Shell - 行列转换

    在日常文本的处理中,我们经常会碰见行列转换的情况,以下为几种常见的行列转换命令: 方案一 基本思路:将所有内容存储...

  • SQL 行列转换

    前段时间有人问了一个问题,就是SQL的行列转换,当时有点懵没答上来,后来细细想一想,其实最近的一个项目就已经用到了...

  • 行列向量转换

    doc: https://docs.scipy.org/doc/numpy/reference/generated...

  • HIVE :行列转换

    举个栗子 a b 1a b 2a b 3c...

网友评论

      本文标题:MySQL学习之行列转换案例

      本文链接:https://www.haomeiwen.com/subject/erenkqtx.html