mysql行转列transform_MySQL学习之行列转换案例

本文介绍了在MySQL中如何实现行转列和列转行的操作。通过创建示例表格并使用聚合函数配合CASE WHEN进行行转列,以及UNION ALL进行列转行的SQL实现。内容包括具体SQL语句和结果展示。
摘要由CSDN通过智能技术生成

前言

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);

4283472ae4f3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.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;

4283472ae4f3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.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);

4283472ae4f3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.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

4283472ae4f3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值