MySQL學習之行列轉(zhuǎn)換案例

前言

Oracle中的pivot/unpivot函數(shù)可以很方便的幫助我們實現(xiàn)行列轉(zhuǎn)換,但是MySQL并不支持。
可以在SQL上想辦法,比如pivot考慮用聚合函數(shù)+case when, unpiovt函數(shù)考慮用union all。

一、行轉(zhuǎn)列

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實現(xiàn)
#行轉(zhuǎn)列
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

二、列轉(zhuǎn)行

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, '數(shù)學' AS COURSE, math AS SCORE FROM wd_test2  
UNION SELECT username, '英語' AS COURSE, en AS SCORE FROM wd_test2  
ORDER BY username,COURSE  
圖片.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 10,137評論 0 44
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,983評論 0 9
  • 團結的催化劑 【宣傳與說服】 宣傳單靠自身的力量是無法叫那些不愿接受的人接受的,它只能打入那些本來就打開的心扉,或...
    蘇菲小姐的咖啡時光閱讀 356評論 0 0
  • 面對快節(jié)奏的生活和工作,你是否有拖延,效率低的毛病,導致事情越來越多,越來越拖的狀況,番茄工作法被稱為最有效率的工...
    嬌之語閱讀 558評論 0 0
  • 你的世界是不需要另一個人,還是不需要我?這都沒關系,總之是,不需要。無法理解這樣的內(nèi)心是怎么寫出那些感性的文字?我...
    Vikki的馬甲閱讀 148評論 0 0

友情鏈接更多精彩內(nèi)容