在MySQL中,將行轉(zhuǎn)換為列可以使用Pivot Table(數(shù)據(jù)透視表)的概念。利用這個方法可以節(jié)省時間并提高效率。
首先,讓我們通過下面這張表格來了解一下我們將要做的事情:
+-------+--------+----------+------+ | 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 | +-------+--------+----------+------+
我們的目標是將表格轉(zhuǎn)換為以下格式:
+-------+------+-----+-----+ | Name | Math | Ph | Bio | +-------+------+-----+-----+ | Alice | 90 | 80 | 70 | | Bob | 85 | 75 | 60 | +-------+------+-----+-----+
如何實現(xiàn)?使用下面的代碼將會是一個不錯的選擇:
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;
讓我們看看這個SQL代碼究竟在做什么:
- 首先,我們按照Name對表格進行分組,得到所有學(xué)生的成績。
- 然后,我們在CASE子句中創(chuàng)建了條件:如果Category是“math”,則返回Mark,否則返回NULL。
- 使用每個條件創(chuàng)建了一列。
- 通過使用MAX函數(shù)選擇最大值,MySQL將值從行轉(zhuǎn)換為列。
通過使用這個技巧,我們可以快速將行轉(zhuǎn)換為列,同時實現(xiàn)簡單而有效的數(shù)據(jù)管理。