在開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到將一列數(shù)據(jù)拆分為多行的情況,這時(shí)可以使用Mysql的轉(zhuǎn)置函數(shù)將其實(shí)現(xiàn)。
-- 原始表結(jié)構(gòu) CREATE TABLE student ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT NOT NULL, course1 INT NOT NULL, course2 INT NOT NULL, course3 INT NOT NULL ); -- 原始數(shù)據(jù) INSERT INTO student(name, age, course1, course2, course3) VALUES('張三',18,65,78,92); INSERT INTO student(name, age, course1, course2, course3) VALUES('李四',19,80,85,90); INSERT INTO student(name, age, course1, course2, course3) VALUES('王五',20,90,88,93); -- 使用UNION ALL將一列數(shù)據(jù)轉(zhuǎn)置為多行 SELECT name, age, 'course1' AS course, course1 AS score FROM student UNION ALL SELECT name, age, 'course2' AS course, course2 AS score FROM student UNION ALL SELECT name, age, 'course3' AS course, course3 AS score FROM student;
上述代碼中,使用UNION ALL將三個(gè)SELECT語(yǔ)句拼接在一起實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)置。其中,每個(gè)SELECT語(yǔ)句查詢(xún)出對(duì)應(yīng)課程的名稱(chēng)和成績(jī),通過(guò)'AS'關(guān)鍵字給查詢(xún)出來(lái)的名稱(chēng)和成績(jī)起別名,然后使用UNION ALL將三個(gè)結(jié)果集拼接在一起。
執(zhí)行以上操作后,我們可以得到一個(gè)新的包含多行數(shù)據(jù)的結(jié)果集,每一行代表一門(mén)課程及其對(duì)應(yīng)的學(xué)生和成績(jī),得到如下結(jié)果:
+--------+-----+---------+-------+ | name | age | course | score | +--------+-----+---------+-------+ | 張三 | 18 | course1 | 65 | | 李四 | 19 | course1 | 80 | | 王五 | 20 | course1 | 90 | | 張三 | 18 | course2 | 78 | | 李四 | 19 | course2 | 85 | | 王五 | 20 | course2 | 88 | | 張三 | 18 | course3 | 92 | | 李四 | 19 | course3 | 90 | | 王五 | 20 | course3 | 93 | +--------+-----+---------+-------+
這樣,我們就可以得到一列數(shù)據(jù)變?yōu)榱硕嘈械慕Y(jié)構(gòu),方便我們進(jìn)行開(kāi)發(fā)和數(shù)據(jù)分析。
上一篇制作外置css代碼
下一篇mysql一列和相加