欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简单谈谈MySQL数据透视表

程序员文章站 2022-06-27 14:59:11
我有一张这样的产品零件表: 部分 part_id part_type product_id ---------------------------...

我有一张这样的产品零件表:

部分

part_id   part_type   product_id
--------------------------------------
1      a       1
2      b       1
3      a       2
4      b       2
5      a       3
6      b       3

我想要一个返回如下表格的查询:

product_id   part_a_id   part_b_id
----------------------------------------
1        1       2
2        3       4
3        5       6

在实际实施中,将有数百万个产品部件

最佳答案

不幸的是,mysql没有pivot功能,但您可以使用聚合函数和case语句对其进行建模.对于动态版本,您需要使用预准备语句:

set @sql = null;
select
 group_concat(distinct
  concat(
   'max(case when part_type = ''',part_type,''' then part_id end) as part_','_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;

如果您只有几列,那么您可以使用静态版本:

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动态透视全部内容,希望文章能够帮你解决mysql动态透视所遇到的程序开发问题。