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语句在一起使用,才能得到需要的效果。

原文地址:https://www.cnblogs.com/smile-nn/p/8145213.html