2017-06-29 7 views
0

私はy = 20の行を持ち、行をn個のサブグループに分割する新しい列を作成したいと考えています。 nが4の場合、結果は次のようになります。サブグループにデータを分割する

RowNumber NewColumn 
1 1 
2 1 
3 1 
4 1 
5 1 
6 2 
7 2 
8 2 
9 2 
10 2 
11 3 
12 3 
13 3 
14 3 
15 3 
16 4 
17 4 
18 4 
19 4 
20 4 

これをSQL/TeraDataでどうすれば実現できますか?

PS:

受け入れ答えに追加するには、私はこれらの線に沿って何かを使用しています:

1 + FLOOR((ROW_NUMBER() OVER (ORDER BY Id DESC) - 1)/100) AS SubGroup 

答えて

1

あなただけの算術演算を使用することができます。

select 1 + floor((row_number - 1)/4) as newColumn 
from t; 

注:Teradataのは、することを好みます整数の除算なので、floor()は厳密には必要ではありません。

+0

すごいを見るには - できるだけ早くチェックします – cs0815

1

ありパーセンタイル、QUANTILEにデータをバケットに古い機能だが、それは非推奨です:あなたはすでに別のOLAP機能を使用する場合

QUANTILE(4, ORDER BY whatever ASC) 

方が良い

4 * (RANK() OVER (ORDER BY whatever) - 1) 
/COUNT(*) OVER() 

にそれを書き換えるの両方が返さ0とnの間の値です。したがって、期待される結果を得るには1を加えなければなりません。

ところで、標準SQLでわずかに異なる結果を返すNTILEがあります、感謝Missing Functions: CUME_DIST & NTILE

関連する問題