SQL'按顺序分区'将count()转换为rank()?

时间:2017-08-09 13:04:09

标签: sql

我正在尝试弄清楚如何正确使用partition by,并寻找以下结果的简要说明。 (我为没有正确的SQL代码而包含测试数据而道歉。)

示例1:计算每家公司的ID(例如股东)并将其添加到原始数据框(作为“newvar”)。

select ID, company, 
count(ID) over(partition by company) as newvar
from testdata;

示例2:当我现在添加order by shares count()时,似乎变成了rank(),因此输出只是一个排名变量。

select ID, company, 
count(ID) over(partition by company order by shares) as newvar
from testdata;

我认为订单只是命令数据,但它似乎对“newvar”有影响。

对此有一个简单的解释吗?

非常感谢提前!

包含testdata的

.csv文件:

ID;company;shares
1;a;10
2;a;20
3;a;70
1;b;50
4;b;10
5;b;10
6;b;30
2;c;80
3;c;10
7;c;10
1;d;20
2;d;30
3;d;25
6;d;10
7;d;15

1 个答案:

答案 0 :(得分:1)

带有count()

order by会产生累积计数。它会将值转换为rank()row_number(),具体取决于shares值中的关系以及数据库如何处理丢失的窗口帧rows between或{{1 }})。

如果您只想订购数据,那么range between应该在order by子句之后:

from