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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM