Mysql列转行, group_concat的使用

开始业务的查询的时候碰到一个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

posted @ 2021-09-27 14:32  陈科科  阅读(226)  评论(0编辑  收藏  举报