MySQL 行轉(zhuǎn)列函數(shù)是一種將重復(fù)數(shù)據(jù)進(jìn)行壓縮、整理的函數(shù)。MySQL 是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),而行轉(zhuǎn)列函數(shù)可以讓我們更加方便地對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作。使用行轉(zhuǎn)列函數(shù),可以將多條記錄的數(shù)據(jù)合并為一條記錄,使數(shù)據(jù)更加精簡(jiǎn)。下面我們來(lái)學(xué)習(xí)一下如何使用 MySQL 的行轉(zhuǎn)列函數(shù)。
CREATE TABLE student_scores ( student_id INT, subject VARCHAR(20), score INT ); INSERT INTO student_scores VALUES (1, 'math', 98), (1, 'english', 88), (1, 'history', 82), (2, 'math', 72), (2, 'english', 91), (2, 'history', 78), (3, 'math', 84), (3, 'english', 95), (3, 'history', 88); SELECT * FROM student_scores;
以上是創(chuàng)建并插入一些數(shù)據(jù)的語(yǔ)句。我們創(chuàng)建了一個(gè)學(xué)生成績(jī)表,表中有三個(gè)字段:學(xué)生 ID,學(xué)科和成績(jī)。我們插入了一些數(shù)據(jù)用來(lái)作為演示。下面我們來(lái)介紹如何將這個(gè)表格中的成績(jī)數(shù)據(jù)進(jìn)行行轉(zhuǎn)列。
SELECT student_id, MAX(CASE WHEN subject = 'math' THEN score ELSE 0 END) AS math, MAX(CASE WHEN subject = 'english' THEN score ELSE 0 END) AS english, MAX(CASE WHEN subject = 'history' THEN score ELSE 0 END) AS history FROM student_scores GROUP BY student_id;
以上是使用 MySQL 行轉(zhuǎn)列函數(shù)的語(yǔ)句。我們?cè)?SELECT 子句中使用了 3 個(gè) MAX 函數(shù),每個(gè) MAX 函數(shù)都是用來(lái)將某個(gè)學(xué)科的成績(jī)提取出來(lái)。我們使用了 CASE WHEN 子句來(lái)進(jìn)行條件判斷,如果學(xué)科是 math,則取出成績(jī),如果不是,則返回 0。然后將這個(gè)值傳遞給 MAX 函數(shù),這樣可以確保每個(gè)學(xué)生的成績(jī)都會(huì)被提取出來(lái)。最后,使用 GROUP BY 子句來(lái)按照學(xué)生 ID 分組,得到對(duì)應(yīng)的每個(gè)學(xué)生的成績(jī)數(shù)據(jù)。
以上就是 MySQL 行轉(zhuǎn)列函數(shù)的用法。使用行轉(zhuǎn)列函數(shù)可以讓我們更加方便地對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作。而 MySQL 中的行轉(zhuǎn)列函數(shù)可以幫助我們把重復(fù)的數(shù)據(jù)進(jìn)行壓縮、整理,讓數(shù)據(jù)更加精簡(jiǎn)。如果你需要在 MySQL 中進(jìn)行行轉(zhuǎn)列操作,那么請(qǐng)嘗試使用這些技巧!