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

如何用单条SELECT语句实现多分组,同时汇总类别和子类别总价

问题原因分析

你现有SQL的分组维度是Category + Subcategory,两个SUM(Price)统计的都是同一个子分类分组下的价格总和,无法得到整个分类的总价格。

解决方案

方案1:窗口函数实现(推荐,支持MySQL 8.0+/PostgreSQL/SQL Server等主流新版本数据库)

利用窗口函数可以在不压缩原数据行的前提下,按不同维度聚合计算:

SELECT DISTINCT
    Category,
    Subcategory,
    SUM(Price) OVER (PARTITION BY Category) AS `Total Category Price`,
    SUM(Price) OVER (PARTITION BY Category, Subcategory) AS `Total Subcategory Price`
FROM 
    `table`
  • PARTITION BY Category指定按分类维度聚合,得到整个分类的总价格
  • PARTITION BY Category, Subcategory指定按分类+子分类维度聚合,得到子分类总价格
  • 加DISTINCT是为了对相同子分类的重复行去重,最终每个子分类只返回一行结果,完全匹配你的预期输出。

方案2:子查询关联实现(兼容不支持窗口函数的低版本数据库)

分别计算分类总价格、子分类总价格,再通过关联得到结果:

SELECT
    t_sub.Category,
    t_sub.Subcategory,
    t_cat.total_cat_price AS `Total Category Price`,
    t_sub.total_sub_price AS `Total Subcategory Price`
FROM
    -- 计算每个子分类的总价格
    (
        SELECT 
            Category, 
            Subcategory, 
            SUM(Price) AS total_sub_price 
        FROM `table` 
        GROUP BY Category, Subcategory
    ) AS t_sub
INNER JOIN
    -- 计算每个分类的总价格
    (
        SELECT 
            Category, 
            SUM(Price) AS total_cat_price 
        FROM `table` 
        GROUP BY Category
    ) AS t_cat ON t_sub.Category = t_cat.Category

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:57:01