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

求SQL查询语句:按Category统计TotalSales并展示多列及占比

按Category统计销售额并计算占比的SQL实现

原表数据(Orders$)

CategorySub-CateSales
ChairsPaper16.448
SuppliersBinders3.54
ChairsArt85
SuppliersBinders45.89
FurniturePaper75.235

需求

按Category列统计该分类的总销售额(TotalSales),同时输出每条记录的Sub-Cate、Sales、对应分类的TotalSales,以及该条记录销售额占分类总销售额的比例(Percentage = Sales / 对应Category的TotalSales)。

原尝试的SQL语句

select Category,sales,TotalSales from (
select Category,Sales,
case when Category='Office Supplies' then sum(sales)
when Category='Furniture' then sum(sales)
end as TotalSales
from Orders$
group by  Category,Sales ) as tmp
order by Category desc

期望查询结果

CategorySub-CateSalesTotalSalesPercentage
ChairsPaper16.448101.448%
SuppliersBinders3.5449.43%
ChairsArt85101.448%
SuppliersBinders45.8949.43%
FurniturePaper75.23575.235%

正确的SQL语句

使用窗口函数SUM() OVER(PARTITION BY Category)可以直接计算每个分类的总销售额,无需复杂的子查询或分组关联,语句如下:

SELECT
    Category,
    `Sub-Cate`,
    Sales,
    SUM(Sales) OVER(PARTITION BY Category) AS TotalSales,
    -- 格式化百分比,保留两位小数并添加%符号,可按需调整精度
    CONCAT(ROUND((Sales / SUM(Sales) OVER(PARTITION BY Category)) * 100, 2), '%') AS Percentage
FROM Orders$
ORDER BY Category DESC;

说明

  1. SUM(Sales) OVER(PARTITION BY Category):窗口函数会为每条记录计算其所属Category的总销售额,无需对原数据分组聚合,保留所有原始记录的同时得到分类总计。
  2. 占比计算:用单条记录的Sales除以对应分类的TotalSales,乘以100后保留两位小数并拼接%符号,得到直观的百分比展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:25:32