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

MySQL中如何移除GROUP_CONCAT结果中的max(id)或首条记录

示例数据截图

需求说明

需要在MySQL的GROUP_CONCAT返回结果中,跳过每个分组内id最大的首条记录,原有查询语句如下:

select email, group_concat(id order by id desc) as id 
from api_admin.external_user 
group by email 
having count(1) > 1;
实现方法

两种常用方案,按需选择即可:

  • 方案1:先过滤每个分组的最大id,再做分组拼接(稳定性更高,推荐使用)
    先通过子查询拿到每个邮箱对应的最大id,关联原表把这条记录排除后,再执行分组拼接逻辑:
SELECT 
    t1.email,
    GROUP_CONCAT(t1.id ORDER BY t1.id DESC) AS id
FROM api_admin.external_user t1
LEFT JOIN (
    SELECT email, MAX(id) AS max_id
    FROM api_admin.external_user
    GROUP BY email
) t2 ON t1.email = t2.email AND t1.id = t2.max_id
WHERE t2.max_id IS NULL
GROUP BY t1.email
HAVING COUNT(1) > 1;
  • 方案2:拼接后直接截断字符串
    因为原逻辑是按id倒序拼接,第一个元素就是最大id,直接用SUBSTRING_INDEX把第一个元素截掉即可:
SELECT 
    email,
    SUBSTRING_INDEX(
        GROUP_CONCAT(id ORDER BY id DESC),
        ',',
        -(COUNT(id) - 1)
    ) AS id
FROM api_admin.external_user
GROUP BY email
HAVING COUNT(1) > 1;

注意:该方案受GROUP_CONCAT默认长度限制影响,如果单分组内id数量过多导致拼接结果被截断,截取会出现异常,数据量大的场景优先选方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:51:16