Phi*_*oum 1 sql self-join running-total
我在这里阅读了该教程:http : //www.1keydata.com/sql/sql-running-totals.html,这一切都是有意义的,直到排名,中位数和运行总计突然变得极其荒谬得令人难以置信地复杂等等。有人可以用简单的英语解释该查询如何产生连续的总数吗?谢谢!
在开始之前,我以前从未见过这种方法,而且它看起来也不是实现运行总计的一种非常容易理解的方法。
好的,这是教程中的查询:
SELECT a1.Name, a1.Sales, SUM(a2.Sales) Running_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;
Run Code Online (Sandbox Code Playgroud)
和样品输出
Name Sales Running_Total
Greg 50 50
Sophia 40 90
Stella 20 110
Jeff 20 130
Jennifer 15 145
John 10 155
Run Code Online (Sandbox Code Playgroud)
该查询的简单部分是显示每个员工的销售数据。我们要做的就是从每个员工中选择name并按sales销售额(降序)对其进行排序。这给出了我们的基本清单。
现在,对于运行总计,我们希望已经显示的每一行。因此,我们将表与自身连接起来,在已经显示的每一行上:
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
Run Code Online (Sandbox Code Playgroud)
然后,我们使用SUM聚合函数并进行相应分组。理解这一点的一个好方法是,如果您查看不使用group函数会发生什么。“ Sophia”行如下所示:
Name A1.Sales A2.Sales
Sophia 40 50
Sophia 40 40
Run Code Online (Sandbox Code Playgroud)
请注意我们是如何获得Greg的销售行的?该小组将对此进行总结,瞧!
希望能有所帮助。乔
| 归档时间: |
|
| 查看次数: |
4567 次 |
| 最近记录: |