首页 >数据库 >mysql教程 >如何在 MySQL 中将长/高数据重塑为宽格式?

如何在 MySQL 中将长/高数据重塑为宽格式?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 01:38:14482浏览

How Can I Reshape Long/Tall Data to Wide Format in MySQL?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn