欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql數組轉行

錢衛國2年前11瀏覽0評論

在MySQL中,我們經常需要將數組轉化為行。這個操作很常見但卻很重要。本文將介紹如何在MySQL中實現這個操作。

--示例數據
CREATE TABLE `score` (
`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 `score` (`name`, `score1`, `score2`, `score3`) VALUES ('Amy', 60, 89, 92), ('Bob', 80, 93, 86), ('Cathy', 70, 88, 89);

一般情況下,我們會使用UNION ALL操作符來實現數組轉化為行:

SELECT name, 'C1' tag, score1 value FROM score
UNION ALL
SELECT name, 'C2', score2 FROM score
UNION ALL
SELECT name, 'C3', score3 FROM score;

這種方法看似簡單,但是當需要將多個列同時轉化成行時,就需要寫很長的SQL語句。為了解決這個問題,我們可以使用MySQL的內置函數GROUP_CONCAT:

SELECT name,
GROUP_CONCAT(CONCAT('C1:', score1, ';', 'C2:', score2, ';', 'C3:', score3) SEPARATOR ',') data
FROM score
GROUP BY name;

結果如下:

+-------+------------------------------------+
| name  | data                               |
+-------+------------------------------------+
| Amy   | C1:60,C2:89,C3:92                  |
| Bob   | C1:80,C2:93,C3:86                  |
| Cathy | C1:70,C2:88,C3:89                  |
+-------+------------------------------------+

當我們需要將數組轉化為行時,使用GROUP_CONCAT函數能夠更加簡潔高效地完成,同時減少代碼冗余。