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

如何不使用GROUP BY查找出现次数最多的产品类别

需求说明

不使用GROUP BY语法,查询得到产品表中重复出现次数最多的类别。
当前尝试编写的SQL如下:

SELECT 
   MAX(COUNT(c.CategoryID) OVER (PARTITION BY c.CategoryName)) 
FROM [Categories] c left join Products p on c.CategoryID=p.CategoryID
当前语句存在的问题
  • 该语句最终只会返回最大的类别出现次数数值,无法返回对应的类别ID、类别名称等核心信息
  • 直接在窗口函数外嵌套MAX()聚合时,没有对关联结果去重,两表关联产生的重复行会导致计数结果偏大
  • 直接统计c.CategoryID会把没有对应产品的类别也计入统计(计数为1),和实际产品关联的类别计数逻辑不一致
无GROUP BY的正确实现方案
WITH CategoryStat AS (
    SELECT DISTINCT
        c.CategoryID,
        c.CategoryName,
        COUNT(p.ProductID) OVER (PARTITION BY c.CategoryID) AS ProductTotal
    FROM Categories c
    LEFT JOIN Products p ON c.CategoryID = p.CategoryID
),
CategoryRank AS (
    SELECT
        CategoryID,
        CategoryName,
        ProductTotal,
        RANK() OVER (ORDER BY ProductTotal DESC) AS SortRank
    FROM CategoryStat
)
SELECT CategoryID, CategoryName, ProductTotal AS MaxRepeatCount
FROM CategoryRank
WHERE SortRank = 1;
实现逻辑说明
  • 第一层公共表达式通过COUNT() OVER(PARTITION BY c.CategoryID)窗口函数完成按类别维度的计数,全程不使用GROUP BY;DISTINCT用于消除两表关联产生的重复行,统计p.ProductID可以自动将无关联产品的类别计数置为0,避免统计偏差
  • 第二层公共表达式通过RANK()窗口函数按类别产品总数倒序打排名,天然支持多个类别并列出现次数最多的场景
  • 最终筛选排名为1的记录,即为出现次数最多的类别,同时返回类别基础信息和对应的重复次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:48:17