在MySQL中,將行轉(zhuǎn)換為列可以使用Pivot Table(數(shù)據(jù)透視表)的概念。利用這個(gè)方法可以節(jié)省時(shí)間并提高效率。
首先,讓我們通過(guò)下面這張表格來(lái)了解一下我們將要做的事情:
+-------+--------+----------+------+ | Name | Gender | Category | Mark | +-------+--------+----------+------+ | Alice | F | math | 90 | | Alice | F | physics | 80 | | Alice | F | biology | 70 | | Bob | M | math | 85 | | Bob | M | physics | 75 | | Bob | M | biology | 60 | +-------+--------+----------+------+
我們的目標(biāo)是將表格轉(zhuǎn)換為以下格式:
+-------+------+-----+-----+ | Name | Math | Ph | Bio | +-------+------+-----+-----+ | Alice | 90 | 80 | 70 | | Bob | 85 | 75 | 60 | +-------+------+-----+-----+
如何實(shí)現(xiàn)?使用下面的代碼將會(huì)是一個(gè)不錯(cuò)的選擇:
SELECT Name, MAX(CASE WHEN Category = 'math' THEN Mark ELSE NULL END) AS 'Math', MAX(CASE WHEN Category = 'physics' THEN Mark ELSE NULL END) AS 'Ph', MAX(CASE WHEN Category = 'biology' THEN Mark ELSE NULL END) AS 'Bio' FROM student_mark GROUP BY Name;
讓我們看看這個(gè)SQL代碼究竟在做什么:
- 首先,我們按照Name對(duì)表格進(jìn)行分組,得到所有學(xué)生的成績(jī)。
- 然后,我們?cè)贑ASE子句中創(chuàng)建了條件:如果Category是“math”,則返回Mark,否則返回NULL。
- 使用每個(gè)條件創(chuàng)建了一列。
- 通過(guò)使用MAX函數(shù)選擇最大值,MySQL將值從行轉(zhuǎn)換為列。
通過(guò)使用這個(gè)技巧,我們可以快速將行轉(zhuǎn)換為列,同時(shí)實(shí)現(xiàn)簡(jiǎn)單而有效的數(shù)據(jù)管理。