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

基于计数与筛选条件查询最大值的SQL语句需求及测试表结构

解决方法:基于计数结果找出最大值的SQL查询

看起来你需要从test表中,通过分组计数后找出计数最大的记录(比如对应最多记录的Col_Key)。下面我会结合你提供的表结构和数据,给出几种可行的SQL方案。

首先先明确你的表结构和测试数据:

-- 创建名为test的表
CREATE TABLE test(
    Id integer PRIMARY KEY,
    Col_Key text, 
    Ng text, 
    node text
);

-- 向表中插入若干记录
INSERT INTO test VALUES(1,'key1','g1','n2');
INSERT INTO test VALUES(2,'key1','g2','n3');
INSERT INTO test VALUES(3,'key2','g3','n1');
INSERT INTO test VALUES(4,'key2','g4','n1');
INSERT INTO test VALUES(5,'key3','g5','n1');
INSERT INTO test VALUES(6,'key3','g6','n2');
INSERT INTO test VALUES(7,'key4','g7','n1');
-- 假设还有更多记录...

方案1:使用子查询匹配最大计数值

这种方法先统计每个Col_Key的记录数,找出最大计数值后,再筛选出对应分组:

SELECT Col_Key, COUNT(*) AS record_count
FROM test
GROUP BY Col_Key
HAVING COUNT(*) = (
    SELECT MAX(count_val)
    FROM (
        SELECT COUNT(*) AS count_val
        FROM test
        GROUP BY Col_Key
    ) AS counts
);

解释:

  • 最内层子查询先按Col_Key分组,得到每个分组的记录数;
  • 中层子查询从这些计数里提取最大值;
  • 最外层筛选出计数等于最大值的Col_Key及其对应数量,支持多个分组并列第一的情况。

方案2:用窗口函数简化查询(适配现代数据库)

如果你的数据库支持窗口函数(比如MySQL 8+、PostgreSQL、SQL Server等),可以用RANK()函数更简洁地实现:

SELECT Col_Key, record_count
FROM (
    SELECT 
        Col_Key, 
        COUNT(*) AS record_count,
        RANK() OVER (ORDER BY COUNT(*) DESC) AS rank_num
    FROM test
    GROUP BY Col_Key
) AS ranked_counts
WHERE rank_num = 1;

解释:

  • 内层查询在分组计数的同时,用RANK()按计数降序给每个分组排名;
  • 外层直接筛选排名为1的记录,自动保留所有并列第一的分组。如果只想返回一条结果,可以把RANK()换成ROW_NUMBER(),但要注意排序的稳定性。

方案3:仅获取最大计数值

如果你只需要知道最大的记录数,不需要对应Col_Key,可以简化为:

SELECT MAX(count_val) AS max_record_count
FROM (
    SELECT COUNT(*) AS count_val
    FROM test
    GROUP BY Col_Key
) AS counts;

根据你的实际需求选择对应的方案即可,比如要找所有最多记录的分组,方案1和2都适用;仅需数值的话方案3最直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:03:37