1. 程式人生 > >mysql行轉列(if + sum)

mysql行轉列(if + sum)

mysql用sum+if 完成行轉列(行表資料如下)

首先思考如何創建出列結構

SELECT
	NAME AS '姓名',
	IF(type = '語文', score, 0) AS yuwen,
	IF(type = '數學', score, 0) AS shuxue
FROM
	cdy_test

完成上面的後就可以看到只需要將結果以名稱分組並按列sum求和或用max取最大值就可以獲取到滿足
的結構了(因為不對應學科的記錄,其分數必然是0),完善sql如下

SELECT
	NAME AS '姓名',
	SUM(IF(type = '語文', score, 0)) AS yuwen,
	SUM(IF(type = '數學', score, 0)) AS shuxue
FROM
	cdy_test
GROUP BY
	NAME

總結:if主要是用來建立新列,並將非對應學科的分數寫為0,用sum或max配合group by保證取出的值是學科

對應的值,這樣就可以完成行轉列了(當然這種寫法沒有考慮對效能的影響)