MySQL中的列轉行是一種數據轉換技術。在某些情況下,一些數據可能以列的形式存儲在表中。但是,在數據處理時,通常需要將這些數據轉換為行的形式以更方便地操作和分析。MySQL提供了幾種方法來實現這種轉換,下面介紹一些常用的術語。
-- 示例表結構 CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `score1` int(11) DEFAULT NULL, `score2` int(11) DEFAULT NULL, `score3` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; -- 示例數據 INSERT INTO `demo` (`name`, `score1`, `score2`, `score3`) VALUES ('小明', 80, 90, 70), ('小紅', 90, 85, 95), ('小張', 70, 75, 80);
1. 使用UNION ALL實現列轉行
使用UNION ALL操作符可以將多個SELECT語句的結果合并成一個結果集。具體實現方式是把每列數據作為一個SELECT語句中的一列,在每個SELECT語句中查詢一個列,然后將結果集合并起來。以下是示例代碼:
SELECT name, 'score1' AS subject, score1 AS score FROM demo UNION ALL SELECT name, 'score2' AS subject, score2 AS score FROM demo UNION ALL SELECT name, 'score3' AS subject, score3 AS score FROM demo;
2. 使用CASE WHEN實現列轉行
使用CASE WHEN語句可以實現在一條SELECT語句中查詢多列數據,將數據轉換為行的形式。以下是示例代碼:
SELECT name, CASE WHEN subject = 'score1' THEN score1 WHEN subject = 'score2' THEN score2 WHEN subject = 'score3' THEN score3 END AS score FROM demo CROSS JOIN (SELECT 'score1' AS subject UNION ALL SELECT 'score2' UNION ALL SELECT 'score3') AS s;
3. 使用GROUP BY實現列轉行
使用GROUP BY語句可以將數據分組,然后將每一組的數據合并成一行。例如,可以把每個學生的三個成績作為一組數據,然后將每組數據合并成一個結果集。以下是示例代碼:
SELECT name, MAX(CASE WHEN subject = 'score1' THEN score END) AS score1, MAX(CASE WHEN subject = 'score2' THEN score END) AS score2, MAX(CASE WHEN subject = 'score3' THEN score END) AS score3 FROM demo CROSS JOIN (SELECT 'score1' AS subject UNION ALL SELECT 'score2' UNION ALL SELECT 'score3') AS s GROUP BY name;
以上是MySQL中常用的列轉行術語,可以根據實際業務場景選擇合適的方法,提高數據處理效率。
上一篇go 第三方庫json
下一篇mysql前面有一個引號