算总合百分比
要用 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)" 除以总合来求出每一行的累积总合百分比。