sql 累计占比_SQL语句-求总和的百分比

问题:求特定列中的值占总和的百分比。例如,确定所有DEPTNO 10工资占总工资的百分比(DEPTNO 10的工资在总工资中的百分比数)。

解决方案

总的来说,在SQL中计算占总数的百分比跟书面计算一样:先除后乘。这个例子要计算表EMP中DEPTNO 10工资所占的百分比。首先,算出DEPTNO 10的工资,然后除以表中的工资总和,最后一步,乘以100,则返回一个表示百分比的值。

MySQL和PostgreSQL

DEPTNO 10的工资总和除以所有工资总和:

1 select (sum(

2           case when deptno = 10 then sal end)/sum(sal)

3          )*100 as pct

4    from emp

DB2、Oracle和SQL Server

使用内联视图及窗口函数SUM OVER,计算出所有工资总和以及DEPTNO 10的工资和。然后,在外层查询中进行除法和乘法操作:

1   select distinct (d10/total)*100 as pct

2     from (

3   select deptno,

4          sum(sal)over() total,

5          sum(sal)over(partition by deptno) d10

6     from emp

7          ) x

8    where deptno=10

讨论

MySQL和PostgreSQL

用CASE语句能够轻松地得到DEPTNO 10的工资

你可能感兴趣的:(sql,累计占比)