oracleI基础入门附(2)算总合百分比,算累积总合百分比 Crazy

算总合百分比
要用 SQL 算出总合百分比,我们需要用到算排名和累积总计的概念,以及运用子查询的做
法。在这里,我们把子查询放在外部查询的 SELECT 子句中。让我们来看以下的例子:
Total_Sales 表格
Name          Sales
John            10
Jennifer       15
Stella          20
Sophia        40
Greg           50
Jeff             20
要算出总合百分比,我们键入:
SELECT a1.Name, a1.Sales, a1.Sales/(SELECT SUM(Sales) FROM Total_Sales) Pct_To_Total
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;
结果:
Name         Sales            Pct_To_Total
Greg          50                  0.3226
Sophia       40                  0.2581
Stella        20                   0.1290
Jeff           20                   0.1290
Jennifer    15                   0.0968
John         10                   0.0645
"SELECT SUM(Sales) FROM Total_Sales" 这一段子查询是用来算出总合。总合算出后,我
们就能够将每一行一一除以总合来求出每一行的总合百分比。
算累积总合百分比
要用 SQL 累积总合百分比算出,我们运用类似总合百分比的概念。两者的不同处在于在这
个情况下,我们要算出到目前为止的累积总合是所有总合的百分之几,而不是光看每一笔资
料是所有总合的百分之几。让我们来看看以下的例子:
Total_Sales 表格
Name                   Sales
John                     10
Jennifer                15
Stella                    20
Sophia                   40
Greg                     50
Jeff                       20
要算出累积总合百分比,我们键入:
SELECT a1.Name, a1.Sales, SUM(a2.Sales)/(SELECT SUM(Sales) FROM Total_Sales)
Pct_To_Total
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;
结果:
Name                  Sales                Pct_To_Total
Greg                    50                   0.3226
Sophia                 40                    0.5806
Stella                   20                   0.7097
Jeff                      20                   0.8387
Jennifer                15                  0.9355
John                      10                 1.0000
"SELECT SUM(Sales) FROM Total_Sales" 这一段子查询是用来算出总合。我们接下来用累
积总计 "SUM(a2.Sales)" 除以总合来求出每一行的累积总合百分比。

原文地址:https://www.cnblogs.com/flyscan/p/2545988.html