如何从100分的工资中获得百分比

Posted

技术标签:

【中文标题】如何从100分的工资中获得百分比【英文标题】:how to get percentage out of 100 for salary 【发布时间】:2020-10-14 18:58:18 【问题描述】:

我正在使用 sql developer,我想:

将工资总额添加到最后一行

新列中的百分比,它应该显示每个员工在 100% 中所占的百分比

怎么做?

select name ,sal from(
select last_name name,salary sal from employees e
where  rownum <=5 
)

想要的输出是:

【问题讨论】:

【参考方案1】:

您可以使用grouping set 执行此操作,但有点棘手:

select name, salary, salary / max(salary) over ()
from t
group by grouping sets ((name, salary) ());

诀窍在于窗口函数是在 grouping sets 之后计算的,因此它包括总数。因此使用max(salary) 而不是sum(salary)

【讨论】:

【参考方案2】:

您可以使用窗口函数来计算工资比率(或百分比),并使用union all 聚合查询来生成总计:

select last_name, salary, salary / sum(salary) over() salary_ratio from employee
union all
select null, sum(salary), 1 from employee

这会为您提供比率,即01 之间的值。如果你想要百分比,那么你可以乘以100

【讨论】:

【参考方案3】:

您可以使用分析函数RATIO_TO_REPORT 得到工资占总工资的百分比。如果您希望看到更少的小数位,可以在最后一列添加四舍五入。

查询

WITH
    employees (name, sal)
    AS
        (SELECT 'King', 24000 FROM DUAL
         UNION ALL
         SELECT 'Kochhar', 17000 FROM DUAL
         UNION ALL
         SELECT 'De Haan', 17000 FROM DUAL
         UNION ALL
         SELECT 'Hunold', 9000 FROM DUAL
         UNION ALL
         SELECT 'Ernst', 6000 FROM DUAL)
SELECT name, sal, (ratio_to_report (sal) OVER () * 100) AS percent
  FROM employees;

结果

      NAME      SAL                                      PERCENT
__________ ________ ____________________________________________
King          24000    32.87671232876712328767123287671232876712
Kochhar       17000    23.28767123287671232876712328767123287671
De Haan       17000    23.28767123287671232876712328767123287671
Hunold         9000    12.32876712328767123287671232876712328767
Ernst          6000     8.21917808219178082191780821917808219178

【讨论】:

以上是关于如何从100分的工资中获得百分比的主要内容,如果未能解决你的问题,请参考以下文章

Mysql:如何从数字中减去百分比

在c ++中获取数字的百分比

我可以获得一些关于如何通过在 C# 中使用 webhook API 从 Forge 获取文件翻译进度百分比的帮助/示例吗?

在 OBIEE 中使用计算项目时如何获得正确的百分比值?

BASH:百分比变化 - 如何计算?如何在没有bc的情况下获得绝对价值?

为啥我不能使用 Int 获得百分比