首页 > 数据库 > mysql教程 > 如何使用准备好的语句在 MySQL 中执行动态透视?

如何使用准备好的语句在 MySQL 中执行动态透视?

Mary-Kate Olsen
发布: 2025-01-06 07:31:41
原创
319 人浏览过

How to Perform Dynamic Pivoting in MySQL Using Prepared Statements?

MySQL 中的动态透视

在 MySQL 中,表通常包含标准化格式的数据,需要复杂的查询来检索更多用户中的数据- 友好的格式。其中一种转换是数据透视,其中列转换为行。

考虑一个像“零件”这样的表,它将产品零件 (part_id) 与产品类型 (part_type) 和产品 ID (product_id) 相关联。我们希望对该表进行透视以创建一个新表,以显示不同零件类型的每个产品的零件 ID。

MySQL 缺乏专用的 PIVOT 函数,因此我们需要使用替代技术。一种解决方案涉及使用聚合函数和 CASE 语句。对于动态数据透视,我们可以利用准备好的语句。

动态透视查询

以下查询使用动态 SQL 来透视“Parts”表:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when part_type = ''',
      part_type,
      ''' then part_id end) AS part_',
      part_type, '_id'
    )
  ) INTO @sql
FROM
  parts;
SET @sql = CONCAT('SELECT product_id, ', @sql, ' 
                  FROM parts 
                   GROUP BY product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
登录后复制

此查询根据表中存在的不同部分类型动态生成 SQL 语句,并使用准备好的语句执行它以改进

结果示例

结果表将具有以下格式:

product_id      part_A_id      part_B_id
----------------------------------------
1               1              2
2               3              4
3               5              6
登录后复制

静态数据透视查询

对于有限数量的零件类型,静态数据透视查询可以是使用:

select product_id,
  max(case when part_type ='A' then part_id end) as Part_A_Id,
  max(case when part_type ='B' then part_id end) as Part_B_Id
from parts
group by product_id
登录后复制

此查询手动指定零件类型并生成数据透视表。

以上是如何使用准备好的语句在 MySQL 中执行动态透视?的详细内容。更多信息请关注PHP中文网其他相关文章!

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