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

如何按ID列GROUP BY并根据Count列数值选择对应字符串?

解决SQL分组保留Count最大对应字符串的问题

嘿,这个需求其实是SQL里非常典型的「分组取最值」场景,我给你几个实用的解决方案,你可以根据自己使用的数据库(比如MySQL、PostgreSQL、SQL Server这类)来选最适配的:

方法1:窗口函数ROW_NUMBER()(推荐现代SQL数据库使用)

这是最直观也最通用的写法,支持绝大多数主流数据库(除了极老版本的MySQL):

WITH ranked_data AS (
    SELECT 
        id,
        string,
        count,
        -- 按ID分组,每组内按count降序编号
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY count DESC) AS row_rank
    FROM your_table_name -- 替换成你的表名
)
-- 只取每组编号为1的行(也就是count最大的那一行)
SELECT id, string, count
FROM ranked_data
WHERE row_rank = 1;
  • 小提示:如果你的数据存在多个行count并列最大的情况,想保留所有这些行的话,把ROW_NUMBER()换成RANK()就可以了。

方法2:关联子查询(兼容老版本数据库)

如果你的数据库不支持窗口函数或者CTE(公共表表达式),可以用这种传统的关联查询方式:

SELECT t1.id, t1.string, t1.count
FROM your_table_name t1
INNER JOIN (
    -- 先找出每个ID对应的最大count值
    SELECT id, MAX(count) AS max_count
    FROM your_table_name
    GROUP BY id
) t2 
ON t1.id = t2.id AND t1.count = t2.max_count;
  • 这个方法会返回所有count等于该ID最大值的行,也就是自动处理了并列最值的情况。

方法3:MySQL专属GROUP_CONCAT技巧(适合简单场景)

如果你用的是MySQL,且确定每个ID只有一个count最大的行(或者接受把并列的string拼接起来),可以用这个简洁的写法:

SELECT 
    id,
    -- 按count降序拼接string后取第一个
    SUBSTRING_INDEX(GROUP_CONCAT(string ORDER BY count DESC), ',', 1) AS string,
    MAX(count) AS count
FROM your_table_name
GROUP BY id;
  • 注意:GROUP_CONCAT有默认长度限制,如果你的string很长,可能需要调整group_concat_max_len参数来避免截断。

你原来的SELECT id, string, count FROM ... ORDER BY id, count DESC只是做了排序,没有对重复ID进行筛选,上面的方法就能帮你精准保留每个ID下count最大的对应string啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:24:50