將 MySQL 欄位重組為行
資料轉換是資料庫管理中的常見任務。 在 MySQL 中,為了改進資料分析或表示,通常需要將列資料轉換為行(這個過程稱為逆透視)。雖然 MySQL 缺乏專用的 unpivot 函數,但可以使用 UNION ALL
查詢或 CROSS JOIN
.
UNION ALL
方法
一個有效的策略採用 UNION ALL
運算子:
<code class="language-sql">SELECT id, 'a' AS col, a AS value FROM yourtable UNION ALL SELECT id, 'b' AS col, b AS value FROM yourtable UNION ALL SELECT id, 'c' AS col, c AS value FROM yourtable;</code>
此查詢檢索 id
欄位以及欄位名稱 (col
) 及其對應的值 (value
)。 結果是一個重構的資料集,其中每一行代表一個列值對。
CROSS JOIN
方法
或者,可以使用CROSS JOIN
:
<code class="language-sql">SELECT t.id, c.col, CASE c.col WHEN 'a' THEN a WHEN 'b' THEN b WHEN 'c' THEN c END AS data FROM yourtable t CROSS JOIN ( SELECT 'a' AS col UNION ALL SELECT 'b' UNION ALL SELECT 'c' ) c;</code>
此處,yourtable
(別名 t
)與產生列名稱清單 (col
) 的子查詢連接。 CASE
語句根據列名動態選擇適當的值。 結果與 UNION ALL
方法非常相似,是一個扁平資料集,其中每行包含 id
、列名稱及其關聯值。
UNION ALL
和 CROSS JOIN
技術都為 MySQL 中的列逆透視提供了強大的解決方案,從而能夠將列式資料轉換為行以進行後續處理或視覺化。
以上是如何使用 UNION ALL 或 CROSS JOIN 將 MySQL 列逆透視為行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!