MySQL,将数据从长/高重塑到宽

我在mysql表中的数据具有长/高格式(如下所述),并希望将其转换为宽格式。我可以只使用sql吗?

用一个例子最容易解释。假设您具有有关M个国家/地区,N个键(例如,键可以是收入,政治领导人,地区,大洲等)的(国家/地区,键,值)信息。

Long format has 3 columns: country, key, value

- M*N rows.

e.g.

'USA', 'President', 'Obama'

...

'USA', 'Currency', 'Dollar'

Wide format has N=16 columns: county, key1, ..., keyN

- M rows

example:

country, President, ... , Currency

'USA', 'Obama', ... , 'Dollar'

SQL中是否可以使用宽格式的数据来创建新表?

select distinct key from table;

//这将为我获取所有键。

1)然后如何使用这些关键元素创建表?

2)然后如何填写表格值?

我很确定我可以使用任何脚本语言(我喜欢python)来做到这一点,但想知道在mysql中是否有一种简便的方法。由于经常使用该命令,因此许多统计软件包(例如R和STATA)都内置了此命令。

======

更清楚地说,这是简单情况下所需的输入输出:

输入:

country    attrName    attrValue     key  (these are column names)

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

回答:

交叉表或数据透视表就是答案。从那里可以选择SELECT FROM … INSERT INTO …或从单个SELECT创建一个VIEW。

就像是:

SELECT country, 

MAX( IF( key='President', value, NULL ) ) AS President,

MAX( IF( key='Currency', value, NULL ) ) AS Currency,

...

FROM table

GROUP BY country;

有关更多信息:http

//dev.mysql.com/tech-

resources/articles/wizard/index.html

以上是 MySQL,将数据从长/高重塑到宽 的全部内容, 来源链接: utcz.com/qa/399187.html

回到顶部