导读:
在mysql中,我们经常需要将纵表转换为横表 。本文将介绍如何使用pivot和unpivot函数来实现这一操作 , 并提供具体的示例 。
正文:
1. 什么是纵表和横表?
在mysql中,我们通常使用纵表(也称为列式存储)来存储数据 。纵表的特点是每行代表一个记录,每个字段代表一个属性 。而横表(也称为行式存储)则是将同一记录的不同属性存储在同一行中 , 每列代表一个属性 。
2. 纵表转横表
要将纵表转换为横表,我们可以使用pivot函数 。该函数将纵表中的某些列作为新表的列,同时将其他列作为新表的值 。下面是一个示例:
假设我们有以下的纵表:
| id | name | gender |
|----|------|--------|
| 1 | Tom | M |
| 2 | Jane | F |
| 3 | John | M |
我们想要将其转换为横表 , 即将gender列作为新表的列 , 将name列作为新表的值 。我们可以使用以下代码:
SELECT id,
MAX(CASE WHEN gender = 'M' THEN name END) AS male_name,
MAX(CASE WHEN gender = 'F' THEN name END) AS female_name
FROM table_name
GROUP BY id;
输出结果如下:
| id | male_name | female_name |
|----|-----------|-------------|
| 1 | Tom | NULL |
| 2 | NULL | Jane |
| 3 | John | NULL |
3. 横表转纵表
【mysql把横向和纵向调换 mysql纵表转横数】要将横表转换为纵表,我们可以使用unpivot函数 。该函数将横表中的列转换为行,同时将其他列作为新表的值 。下面是一个示例:
假设我们有以下的横表:
我们想要将其转换为纵表,即将male_name和female_name列转换为新表的一列gender,将其对应的值作为新表的值 。我们可以使用以下代码:
SELECT id, 'M' AS gender, male_name AS name FROM table_name WHERE male_name IS NOT NULL
UNION ALL
SELECT id, 'F' AS gender, female_name AS name FROM table_name WHERE female_name IS NOT NULL;
| id | gender | name |
|----|--------|------|
| 1 | M | Tom |
| 2 | F | Jane |
| 3 | M | John |
总结:
在mysql中,我们可以使用pivot和unpivot函数来实现纵表和横表之间的转换 。当我们需要将同一记录的不同属性存储在同一行中时,可以使用横表;当我们需要将每个属性存储在不同的行中时,可以使用纵表 。
推荐阅读
- mysql只取不同数据
- mysql数据库的索引 数据库mysql索引原理
- mysql读写性能测试 mysql读写慢怎么弄
- mysql查询结果分页显示 mysql分页显示序号
- mysql的服务器不小心被删除了怎么办 是mysql的服务器
- mysql三个表查询语句 mysql三个表