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