Mysql列转行, group_concat的使用

2023-07-30,,

开始业务的查询的时候碰到一个sql的查询语句问题,主要是 group_concat 之前没用过,现在记录一下怎么用

group_concat

用法, 可以将相同的行组合起来

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

例子:

表一数据为:

表二数据为:

表三数据为:

表三存在的意义就是将第一张表和第二张表链接起来。

第一次写查询:

将不同类型的素材区分开,然后将相同类型的拼在一起

SELECT
GROUP_CONCAT(case when t2.ad_ml_type='1' then t2.save_name end) as name1,
GROUP_CONCAT(case when t2.ad_ml_type='2' then t2.save_name end) as name2,
GROUP_CONCAT(case when t2.ad_ml_type='3' then t2.save_name end) as name3,
GROUP_CONCAT(case when t2.ad_ml_type='4' then t2.save_name end) as name4
t1.*,
FROM
ad_material_library t1,
ad_ml_label t2,
ad_ml_label_map t3
WHERE
t1.id = t3.ml_id
AND t3.label_id = t2.id
GROUP BY
t1.id

更改二:

SELECT
GROUP_CONCAT(Distinct(case when t2.ad_ml_type='1' then t2.save_name end) SEPARATOR '__') as "material_type",
GROUP_CONCAT(Distinct(case when t2.ad_ml_type='2' then t2.save_name end) SEPARATOR '__') as "material_content",
GROUP_CONCAT(Distinct(case when t2.ad_ml_type='3' then t2.save_name end) SEPARATOR '__') as "material_label",
GROUP_CONCAT(Distinct(case when t2.ad_ml_type='4' then t2.save_name end) SEPARATOR '__') as "material_belong",
t1.*
FROM
ad_material_library t1,
ad_ml_label t2,
ad_ml_label_map t3
WHERE
t1.id = t3.ml_id
AND t3.label_id = t2.id
GROUP BY
t1.id

得到结果

第二个例子

参考: https://blog.csdn.net/beidaol/article/details/93325855

Mysql列转行, group_concat的使用的相关教程结束。

《Mysql列转行, group_concat的使用.doc》

下载本文的Word格式文档,以方便收藏与打印。