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

SQL技术求助:获取特定列值较小的行及COUNT最小值对应表

解决获取COUNT值最小记录的SQL方案

嘿,我来帮你搞定这个问题!要找出COUNT(Problem.Solver_Assigned_ID)最小的记录,其实有几种靠谱的方法,你可以根据自己使用的数据库类型来选择合适的方案:

方法1:子查询匹配最小COUNT值

如果你的需求是找出所有分组中COUNT值等于最小值的记录(包括并列情况),可以用嵌套子查询先拿到最小的统计值,再筛选匹配的结果。假设你是按某个字段(比如Solver_ID)分组统计的,示例代码如下:

SELECT 
    Solver_ID,
    COUNT(Problem.Solver_Assigned_ID) AS assigned_count
FROM Problem
-- 如果有其他过滤条件,可以在这里加WHERE子句
GROUP BY Solver_ID
HAVING COUNT(Problem.Solver_Assigned_ID) = (
    SELECT MIN(assigned_count)
    FROM (
        SELECT COUNT(Solver_Assigned_ID) AS assigned_count
        FROM Problem
        -- 这里要和主查询的WHERE条件保持一致
        GROUP BY Solver_ID
    ) AS sub_stats
);

说明:内层子查询先计算每个分组的统计值,外层子查询提取其中的最小值,最后主查询筛选出统计值等于这个最小值的所有分组。

方法2:窗口函数(支持窗口函数的数据库适用)

如果你的数据库支持窗口函数(比如PostgreSQL、SQL Server、MySQL 8.0+),用RANK()或ROW_NUMBER()会更灵活:

WITH counted_groups AS (
    SELECT 
        Solver_ID,
        COUNT(Solver_Assigned_ID) AS assigned_count,
        -- RANK()会保留并列的最小值记录,ROW_NUMBER()只会取一条
        RANK() OVER (ORDER BY COUNT(Solver_Assigned_ID) ASC) AS rank_num
    FROM Problem
    GROUP BY Solver_ID
)
SELECT Solver_ID, assigned_count
FROM counted_groups
WHERE rank_num = 1;

说明:用CTE先给每个分组的统计值排名,排名为1的就是COUNT最小的记录,RANK()会把所有并列第一的都返回,适合需要所有最小记录的场景。

方法3:ORDER BY + LIMIT(快速取单条最小记录)

如果只需要任意一条COUNT值最小的记录,且数据库支持LIMIT(比如MySQL、PostgreSQL),可以用最简单的排序加限制:

SELECT 
    Solver_ID,
    COUNT(Problem.Solver_Assigned_ID) AS assigned_count
FROM Problem
GROUP BY Solver_ID
ORDER BY assigned_count ASC
LIMIT 1;

注意:这个方法只会返回一条记录,如果有多个分组的COUNT值相同且都是最小值,只会拿到其中一个,适合不需要并列结果的场景。

你可以根据自己的实际查询场景(比如是否有过滤条件、是否需要并列结果、数据库类型)调整上述代码中的字段和条件哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:15:22