在 MySQL 中重塑数据:将长/高格式转换为宽格式
在数据分析中,经常需要对长数据进行重塑/tall 格式改为宽格式。此转换将多行多列的表转换为少行多列的表。
问题陈述
考虑一个包含 long/tall 数据的 MySQL 表格式,其中每行代表具有国家/地区、键和值的单个观察。目标是将数据重塑为宽格式,每个国家占一行,每个键占一列。
SQL 解决方案
MySQL 提供了一个内置功能称为交叉表或数据透视表来完成此转换。方法如下:
1.识别键
使用查询从原始表中选择不同的键:
SELECT DISTINCT key FROM table;
此查询的输出将提供键元素列表。
2.创建宽表
创建一个具有以下结构的新表:
CREATE TABLE wide_table ( country VARCHAR(255), key1 VARCHAR(255), ..., keyN VARCHAR(255), newPkey INT AUTO_INCREMENT PRIMARY KEY );
将 key1, ..., keyN 替换为步骤 1 中获得的实际键名称。 newPkey 列是一个自增主键,用于唯一标识宽表中的每一行。
3.填充表值
使用交叉表查询填充宽表:
SELECT country, MAX(IF(key='President', value, NULL)) AS President, MAX(IF(key='Currency', value, NULL)) AS Currency, ... FROM table GROUP BY country;
此查询利用条件聚合(MAX 和 IF)为键列分配值对于每个国家。使用 MAX 函数消除同一国家/地区具有重复键的行。
示例输入和输出
输入:
country | attrName | attrValue | key |
---|---|---|---|
US | President | Obama | 2 |
US | Currency | Dollar | 3 |
China | President | Hu | 4 |
China | Currency | Yuan | 5 |
输出:
country | President | Currency | newPkey |
---|---|---|---|
US | Obama | Dollar | 1 |
China | Hu | Yuan | 2 |
此示例演示了从使用 MySQL 交叉表将长/高转换为宽格式。
以上是如何在 MySQL 中将长/高数据重塑为宽格式?的详细内容。更多信息请关注PHP中文网其他相关文章!