首页 > 数据库 > mysql教程 > 如何透视 MySQL 表:将行转换为列?

如何透视 MySQL 表:将行转换为列?

Barbara Streisand
发布: 2025-01-25 11:32:13
原创
498 人浏览过

How to Pivot a MySQL Table: Transforming Rows into Columns?

将表格重塑为列格式

挑战: 以透视表格式检索 MySQL 表中的数据,将行转换为列。

问题:

给定一个包含 hostid、itemname 和 itemvalue 列的表,请按如下所示显示结果:

hostid A B C
1 10 3 0
2 9 0 40

解决方案:

步骤 1:选择感兴趣的列

确定将提供 y 值 (hostid) 和 x 值 (itemname) 的列。

步骤 2:扩展基础表

为每个唯一的 x 值创建额外的列。

<code class="language-sql">CREATE VIEW history_extended AS
SELECT
    history.*,
    CASE WHEN itemname = "A" THEN itemvalue END AS A,
    CASE WHEN itemname = "B" THEN itemvalue END AS B,
    CASE WHEN itemname = "C" THEN itemvalue END AS C
FROM history;</code>
登录后复制

步骤 3:分组和聚合

按 y 值 (hostid) 分组并聚合扩展表。

<code class="language-sql">CREATE VIEW history_itemvalue_pivot AS
SELECT
    hostid,
    SUM(A) AS A,
    SUM(B) AS B,
    SUM(C) AS C
FROM history_extended
GROUP BY hostid;</code>
登录后复制

步骤 4:美化(可选)

将 NULL 值替换为零,以获得更清晰的外观。

<code class="language-sql">CREATE VIEW history_itemvalue_pivot_pretty AS
SELECT 
    hostid, 
    COALESCE(A, 0) AS A, 
    COALESCE(B, 0) AS B, 
    COALESCE(C, 0) AS C 
FROM history_itemvalue_pivot;</code>
登录后复制

注意事项和限制:

  • 扩展列中使用的值和缺失值的默认值可以自定义。
  • 可以根据需要调整聚合函数(例如,max)。
  • 如果使用多列作为 y 值或需要大量透视列,则此解决方案可能不适用。

以上是如何透视 MySQL 表:将行转换为列?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板