MySQL -- 行轉列的兩種方法

MySQL中行轉列是很常用的,本文給出了兩種行轉列的方法。

兩張表:

左表:product ,右表:cate

SQL語句:

第一種方法:IF()語句

SELECT cid,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM product GROUP BY cid;

第二種方法:CASE  WHEN THEN  ELSE  END

SELECT cid,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM product GROUP BY cid;

兩者得到的結果一樣,如下:

當然也可以進行連表查詢使用,如下SQL:

方法一:
SELECT c.pname ,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id;
方法二:
SELECT c.pname ,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id

兩者得到的結果一樣,如下:

需要說明的地方:

方法二中的MAX()是爲了能夠使用GROUP BY根據cid進行分組,因爲每一個cd對應的 mon ='一月份' 的記錄只有一條,所以MAX()的值就等於對應那一條記錄的num的值。

假如cid='1' 和 mon ='一月份' 的記錄有兩條,則此時MAX() 的值將會是這兩條記錄中的最大的值,同理,使用SUM()就是求兩者的和。因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函數都可以達到行轉列的效果。

更多請看:https://www.caohongyuan.cn/article/74

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章