我正在尝试弄清楚如何正确使用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
答案 0 :(得分:1)
count()
的 order by
会产生累积计数。它会将值转换为rank()
或row_number()
,具体取决于shares
值中的关系以及数据库如何处理丢失的窗口帧rows between
或{{1 }})。
如果您只想订购数据,那么range between
应该在order by
子句之后:
from