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
得到結果


浙公網安備 33010602011771號