You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GROUP BY或GROUP_CONCAT语句在SQL查询中无法正常工作的问题求助

GROUP BY或GROUP_CONCAT语句在SQL查询中无法正常工作的问题求助

嘿,我完全懂你现在的需求——就是想把同一个人的多个电话号码合并到一行里,用逗号分隔展示对吧?你当前的查询会把每个电话号码都拆成单独的行,这显然不是你想要的效果。

其实你需要用到MySQL的GROUP_CONCAT()函数,它专门用来把分组后的多行数据合并成单个字符串,再配合GROUP BY按用户分组就能解决问题啦。我给你修改一下查询:

SELECT 
    CONCAT_WS(' ', people.first_name, people.last_name) AS name,
    COALESCE(GROUP_CONCAT(phones.number SEPARATOR ', '), 'N/A') AS numbers
FROM people
LEFT JOIN phones ON phones.user_id = people.id
GROUP BY people.id, people.first_name, people.last_name;

我给你拆解一下关键部分:

  • GROUP_CONCAT(phones.number SEPARATOR ', '):这个函数会把每个用户(也就是同一个分组)的所有电话号码合并成一个字符串,用', '作为分隔符(默认是逗号,写出来更直观)。
  • COALESCE(..., 'N/A'):如果某个用户没有对应的电话号码(比如Bob Doe),GROUP_CONCAT会返回NULL,这时候用COALESCENULL替换成你想要的'N/A'
  • GROUP BY people.id, people.first_name, people.last_name:因为我们要按每个独立用户分组,所以需要把SELECT里的非聚合字段(名字相关的列)都放到GROUP BY里,这样能避免ONLY_FULL_GROUP_BY模式下的语法错误,也更符合SQL规范。

运行这个查询后,你就能得到和你示例里一样的结果:每个人的名字对应一行,多个电话号码会被合并到numbers列里,没有号码的就显示N/A

备注:内容来源于stack exchange,提问作者Bobby Wan-Kenobi

火山引擎 最新活动