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

group_concat

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

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


例子:

表一数据为:

Mysql列转行, group_concat的使用_数据

表二数据为:

Mysql列转行, group_concat的使用_数据_02

表三数据为:

Mysql列转行, group_concat的使用_查询语句_03

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

第一次写查询:

Mysql列转行, group_concat的使用_分隔符_04

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

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


得到结果

Mysql列转行, group_concat的使用_数据_05