You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL按姓名分组查询无法显示多条同名记录全部属性问题求助

你当前的写法错误出在HAVING条件的逻辑上,你把明细拼接的逻辑放在了过滤条件里,这部分逻辑应该放到SELECT的字段输出部分处理,HAVING是用来过滤分组结果的,不能用来定义输出字段的内容。


正确实现语句(MySQL环境)

SELECT 
  name,
  IF(
    COUNT(*) = 1,
    CAST(COUNT(*) AS CHAR),
    CONCAT(COUNT(*), ' ', GROUP_CONCAT('(', empId, ',', name, ',', gender, ')' SEPARATOR ''))
  ) AS `count`
FROM Salesman
GROUP BY name
ORDER BY name ASC;

逻辑说明

  • 按name分组后先用COUNT(*)拿到同姓名的记录数
  • 用IF判断计数大小:如果计数为1,直接输出计数值;如果计数大于1,用CONCAT把计数值和拼接好的明细串拼到一起
  • GROUP_CONCAT里手动给每条记录拼接前后括号,分隔符设为空字符串,最终输出格式就是(7,Moeen,F)(11,Moeen,M)的形式
  • 别名直接用count即可匹配你要的输出表头

其他数据库适配

如果是PostgreSQL环境,把GROUP_CONCAT替换为STRING_AGG即可,语法如下:

SELECT 
  name,
  CASE
    WHEN COUNT(*) = 1 THEN COUNT(*)::VARCHAR
    ELSE CONCAT(COUNT(*), ' ', STRING_AGG(CONCAT('(', empId, ',', name, ',', gender, ')'), ''))
  END AS count
FROM Salesman
GROUP BY name
ORDER BY name ASC;

内容的提问来源于stack exchange,提问作者Sl33pyWalrus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:27:00