2017-08-09 7 views
0

私はpartition byを正しく使用する方法を理解しようとしており、以下の結果を簡単に説明しています。 (適切なSQLコードなしでテストデータを含めることをお詫び申し上げます)SQL 'by by order by by'はcount()をrank()に変換しますか?

例1:各会社のID(例:株主)をカウントし、元のデータフレームに追加します(「newvar」)。

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

例2:出力は単に順位変数であるように、私は今、order by shares数()何とかランク(に変わるように見える)を追加します。

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

私はデータを注文するだけで、 "newvar"に影響を与えているようです。

ここには簡単な説明がありますか?

事前に感謝します。テストデータが含まれてい

.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

count()order byでは、累積回数を行います。 sharesの値と、データベースが欠落しているウィンドウフレーム(rows betweenまたはrange between)をどのように処理するかによって、値はrank()またはrow_number()になります。

あなただけのデータを注文したい場合は、order byfrom句の後でなければなりません:

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