mysql中GROUP_CONCAT函数解决分组查询一个id对应多个值想要把这多个值展示成一行
现象:
SELECT
t2.r_build_id,t3.hs_id,(CASE t3.ct_type WHEN '2' THEN '外迁' WHEN '3' THEN '货币' WHEN '' THEN '' ELSE '货币+外迁' END) AS ct_type
FROM
house_info_r_205 t1,build_info_r_205 t2,house_contract_205 t3
WHERE
t1.r_buld_id = t2.r_build_id AND t1.hs_id = t3.hs_id
ORDER BY
t2.zyqy_status_time_flow
想要达到的效果是:
27 货币,外迁 或者是 27 货币+外迁
SELECT
t2.r_build_id,
(CASE GROUP_CONCAT(DISTINCT t3.ct_type)
WHEN '2' THEN '外迁'
WHEN '3' THEN '货币'
WHEN '' THEN ''
ELSE '货币+外迁' END) AS ct_type
FROM
house_info_r_205 t1,build_info_r_205 t2,house_contract_205 t3
WHERE
t1.r_buld_id = t2.r_build_id AND t1.hs_id = t3.hs_id
GROUP BY r_build_id
注意:
group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。比较抽象,难以理解。
通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组
结论:group_concat()函数需要与group by语句在一起使用,才能得到需要的效果。