NTILE関数
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 67/72。
NTILE(n)は、行をほぼ均等なn個の分割に分けて番号を付けます。これはパフォーマンスの向上によく使用されます。大量のデータを一度に送信するのは適切でない場合があるため、この関数を使うと一度により小さな分割を送信できます。
例:
| id | level |
| 1 | 4 |
| 2 | 4 |
| 3 | 5 |
| 4 | 6 |
| 5 | 7 |
| 6 | 7 |
SELECT id, level, NTILE(3) OVER (ORDER BY level) as pieces
from table1次の結果が返されます:
| id | level | pieces |
| 1 | 4 | 1 |
| 2 | 4 | 1 |
| 3 | 5 | 2 |
| 4 | 6 | 2 |
| 5 | 7 | 3 |
| 6 | 7 | 3 |
3つのpiecesを取得しました:piece 1にはlevel 4、piece 2にはlevel 5とlevel 6、piece 3にはlevel 7があります。
行数がnで割り切れない場合、NTILEは行をできる限り均等に分配し、より大きなグループを先に配置します。たとえば、9行とNTILE(4)がある場合、分配は次のようになります:
- グループ 1: 3 行
- グループ 2: 2 行
- グループ 3: 2 行
- グループ 4: 2 行
これにより、どのグループも他のグループと行数が1行を超えて異なることはなく、余分な行は番号の小さいグループから先に分配されます。
チャレンジ
簡単利用可能なテーブルとカラム:
creatures:creature_name、preference、has_legs('YES' または 'NO' を含む)
このチャレンジでは、特別な相手を見つけたい生き物たちを扱います。彼らが相性のよい相手を見つけられるよう手助けしましょう。
各生き物には、数値で表される好みがあります。両方の生き物の数値が十分に近ければ、相性のよい組み合わせになる可能性があります。
preference の値に基づいて生き物を3つのグループに分けます。ただし、脚がある生き物(has_legs = 'YES')だけを対象にします。creature_name、preference、および group_number(1、2、または3)を返してください。結果は preference の昇順で並べ替えます。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド