这是我拥有的数据:
客户 | 销售 |
---|---|
A | 3 |
B | 10 |
C | 4 |
D | 2 |
E | 4 |
这就是我想要得到的地方:
#顶级客户 | 总销售额 |
---|---|
1 | 10 |
2 | 14 |
3 | 18 |
4 | 21 |
5 | 23 |
我正在尝试使用
ROW_NUMBER
和 OVER
(窗口函数?)来做到这一点:
SELECT
ROW_NUMBER() OVER (ORDER BY Sales DESC) AS '# TOP CUSTOMERS',
SUM(Sales) OVER (ORDER BY Sales DESC) AS 'SUM SALES'
FROM Sales;
但是我得到了这个结果:
#顶级客户 | 总销售额 |
---|---|
1 | 10 |
2 | 18 |
3 | 18 |
4 | 21 |
5 | 23 |
我需要使用
DENSE_RANK
或PARTITION BY
吗?对于它的价值,我什至不尝试排名或分区,我只是尝试对行进行排序,因此尝试看看是否有一个简单的解决方案。
您还应该包括客户以使该行唯一。看图
SELECT
ROW_NUMBER() OVER (ORDER BY Sales DESC) AS '# TOP CUSTOMERS',
SUM(Sales) OVER (ORDER BY Sales DESC, Customer ASC ) AS 'SUM SALES'
FROM Sales;