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