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

如何在SQL Server中基于已计算的总计计算薪资占比?

薪资占总计百分比的计算方案

嗨,我来帮你搞定这个计算问题!要算出每个薪资值对应总计的百分比,我们可以用两种简洁的方法来实现,下面给你详细说明:

方法一:用窗口函数(推荐)

窗口函数可以直接在原表中按员工分组,快速拿到对应总计值,写法高效又简洁:

SELECT 
    empid,
    Salaryvalue,
    istotal,
    -- 计算百分比并保留1位小数
    ROUND((Salaryvalue / MAX(CASE WHEN istotal = 1 THEN Salaryvalue END) OVER (PARTITION BY empid)) * 100, 1) AS percentage
FROM work.temp
ORDER BY empid, istotal;

代码拆解

  • MAX(CASE WHEN istotal = 1 THEN Salaryvalue END) OVER (PARTITION BY empid):这部分是核心!它会按empid分组,找出每组里标记为总计(istotal=1)的薪资值——因为每个员工只有一行总计,用MAX就能精准拿到这个分母值。
  • ROUND(...,1):把计算出的百分比保留一位小数,和你想要的输出格式匹配。如果不想四舍五入,换成TRUNC((...) * 100,1)就可以得到类似16.6的结果。

方法二:子查询关联(适合不熟悉窗口函数的情况)

如果对窗口函数不太熟悉,用子查询先把每个员工的总计值查出来,再和原表关联计算也能达到目的:

SELECT 
    t.empid,
    t.Salaryvalue,
    t.istotal,
    ROUND((t.Salaryvalue / total.total_salary) * 100, 1) AS percentage
FROM work.temp t
-- 子查询先取出所有员工的总计薪资
JOIN (
    SELECT empid, Salaryvalue AS total_salary
    FROM work.temp
    WHERE istotal = 1
) total ON t.empid = total.empid
ORDER BY t.empid, t.istotal;

最终结果

不管用哪种方法,执行后都会得到符合预期的输出:

empidSalaryvalueistotalpercentage
110.0016.7
120.0033.3
130.0050.0
160.01100.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:48:01