【问题标题】:how to get percentage out of 100 for salary如何从100分的工资中获得百分比
【发布时间】: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 
)

想要的输出是:

【问题讨论】:

    标签: sql oracle sum window-functions


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-08
          • 2021-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-11
          • 2021-10-03
          相关资源
          最近更新 更多