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

SQL Server中含SUM与利润率计算的GROUP BY子句问题求助

解决SQL Server分组计算财务数据的问题

正确的查询语句

SELECT 
    code,
    name,
    SUM(total) AS total_sum,
    SUM(profit) AS profit_sum,
    ROUND((SUM(profit) / NULLIF(SUM(total), 0)) * 100, 2) AS profit_margin
FROM jobs
GROUP BY code, name
ORDER BY total_sum DESC;

问题分析与说明

  • 你原来的查询错误核心:GROUP BY分组后,SELECT中的列要么是聚合函数(比如SUM、COUNT),要么必须出现在GROUP BY子句中。你直接选择total和profit会返回单条记录的数值,不是分组后的总和,而且未将name加入GROUP BY时,SQL Server会因为非聚合列未在分组中而报错。
  • 由于你的数据中code和name是一一对应的(同一个code对应唯一客户名),将name加入GROUP BY不会改变分组逻辑,同时能合法地在SELECT中返回客户名称。
  • 利润率计算需基于总利润/总支出,而非单条记录的利润比,所以必须用SUM(profit)和SUM(total)做除法。NULLIF(SUM(total), 0)用于避免总支出为0时的除零错误,ROUND(...,2)则将利润率保留两位小数,更符合财务报表的展示需求。
  • 最终按total_sum(总支出)降序排序,满足你对结果顺序的要求。

验证结果(基于你的样本数据)

执行上述语句后会得到以下结果:

codenametotal_sumprofit_sumprofit_margin
ch03Chris1106.10123.6511.18
aa01Alan330.2075.4822.86
ab75Abby67.665.448.04

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:55:57