利用MySQL实现一行转换多行的技巧(mysql一行转换多行)

利用MySQL实现一行转换多行的技巧

MySQL是一种高性能、可靠、开放源代码的关系型数据库管理系统,广泛应用于互联网、电商、大数据等领域。在MySQL中,有时我们需要将一行数据转换为多行数据,以便更好地进行数据统计、分析、展示等操作。本文介绍如何利用MySQL实现一行转换多行的技巧,为大家提供参考。

1. 利用UNION ALL关键字实现一行转换为多行

下面是一个示例表格:

CREATE TABLE Persons
(
id INT PRIMARY KEY,
name VARCHAR(50),
hobbies VARCHAR(200)
);

INSERT INTO Persons VALUES (1, "张三", "吃饭,睡觉,打游戏");
INSERT INTO Persons VALUES (2, "李四", "读书,看电影");
INSERT INTO Persons VALUES (3, "王五", "旅游,摄影,跑步");

如果我们想要将hobbies列中的每一个爱好单独展示为一行数据,我们可以使用UNION ALL关键字实现:

SELECT id, name, SUBSTRING_INDEX(SUBSTRING_INDEX(hobbies, ',', numbers.n), ',', -1) as hobby
FROM
(SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers
JOIN Persons ON CHAR_LENGTH(hobbies) - CHAR_LENGTH(REPLACE(hobbies, ',', '')) >= numbers.n-1;

运行上述代码后,结果如下:

+----+------+--------+
| id | name | hobby |
+----+------+--------+
| 1 | 张三 | 吃饭 |
| 1 | 张三 | 睡觉 |
| 1 | 张三 | 打游戏 |
| 2 | 李四 | 读书 |
| 2 | 李四 | 看电影 |
| 3 | 王五 | 旅游 |
| 3 | 王五 | 摄影 |
| 3 | 王五 | 跑步 |
+----+------+--------+

2. 利用GROUP_CONCAT函数实现一行转换为多行

除了使用UNION ALL关键字外,我们还可以使用GROUP_CONCAT函数实现一行转换为多行。下面是示例表格:

CREATE TABLE Orders
(
id INT PRIMARY KEY,
customer VARCHAR(50),
orderitems VARCHAR(200)
);

INSERT INTO Orders VALUES (1, "张三", "鸡腿,可乐,薯条");
INSERT INTO Orders VALUES (2, "李四", "汉堡,可乐");
INSERT INTO Orders VALUES (3, "王五", "炸鸡,雪碧,薯条");

如果我们想要将orderitems列拆分为多行数据,可以使用GROUP_CONCAT函数实现:

SELECT id, customer, SUBSTRING_INDEX(items,',',n) AS orderitem
FROM
(SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) m
JOIN (SELECT id, customer, GROUP_CONCAT(orderitems) items FROM Orders GROUP BY id) t
ON m.n

运行上述代码后,结果如下:

+----+----------+-----------+
| id | customer | orderitem |
+----+----------+-----------+
| 1 | 张三 | 鸡腿 |
| 1 | 张三 | 可乐 |
| 1 | 张三 | 薯条 |
| 2 | 李四 | 汉堡 |
| 2 | 李四 | 可乐 |
| 3 | 王五 | 炸鸡 |
| 3 | 王五 | 雪碧 |
| 3 | 王五 | 薯条 |
+----+----------+-----------+

以上是利用MySQL实现一行转换多行的技巧。通过UNION ALL关键字或GROUP_CONCAT函数,可以将一行数据转换为多行数据,便于我们进行数据处理。


数据运维技术 » 利用MySQL实现一行转换多行的技巧(mysql一行转换多行)