NTILEとCume_Distによるバケット分割
NTILEで行をN個の同じサイズのバケットに分割し、CUME_DISTとPERCENT_RANKで累積分布を計算します。
「NTILEとCume_Distによるバケット分割」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
NTILE:同じサイズのバケット
NTILE(n)は、順序付けされた行をほぼ同じサイズのn個のバケットに分割します。
SELECT id, total,
NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 2 = next, 3, 4 = top 25%パーセンタイルバケット
十分位数にはNTILE(10)、パーセンタイルにはNTILE(100)を使います。
SELECT id, score,
NTILE(100) OVER (ORDER BY score DESC) AS percentile
FROM students;
-- percentile 1 = top 1%PERCENT_RANK
[0, 1]の浮動小数点数で表す相対順位です。
SELECT id, score,
PERCENT_RANK() OVER (ORDER BY score) AS pct_rank
FROM students;
-- 0 for the lowest, 1 for the highest.CUME_DIST
現在の行の値以下である行の割合です。
SELECT id, score,
CUME_DIST() OVER (ORDER BY score) AS cume_dist
FROM students;
-- "What share of students scored ≤ this one?"PERCENTILE_CONTによるパーセンタイル統計
パーセンタイルに相当する値を計算します(連続補間)。
SELECT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) AS median,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY total) AS p95,
PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY total) AS p99
FROM orders;PERCENTILE_DISC
PERCENTILE_CONTと似ていますが、補間した値ではなく、実際に存在する値を返します。
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY total)パーティションに対するNTILE
ユーザーごと、カテゴリごとなどにバケット化します。
SELECT user_id, total,
NTILE(4) OVER (PARTITION BY user_id ORDER BY total) AS user_quartile
FROM orders;NTILEによるヒストグラム
ヒストグラムのビンを作成します。
SELECT bucket, MIN(total) AS bucket_min, MAX(total) AS bucket_max, COUNT(*)
FROM (
SELECT NTILE(10) OVER (ORDER BY total) AS bucket, total
FROM orders
) sub
GROUP BY bucket
ORDER BY bucket;バケットごとに集計する
バケット化した後、バケットごとに統計値を計算します。
SELECT user_quartile, COUNT(*) AS users, AVG(total) AS avg_total
FROM (
SELECT user_id, NTILE(4) OVER (ORDER BY total) AS user_quartile, total
FROM orders
) sub
GROUP BY user_quartile;ウィンドウ関数を組み合わせる
1つのクエリに組み合わせて、詳細なレポートを作成します。
SELECT id, total,
NTILE(4) OVER w AS quartile,
PERCENT_RANK() OVER w AS pct_rank,
AVG(total) OVER w AS overall_avg
FROM orders
WINDOW w AS (ORDER BY total);NTILEが誤解を招く場合
ORDER BYの値が同じ場合、バケットのサイズが不均一になることがあります(NTILEは同値を考慮しません)。同値を区別する列を追加してください。
まとめ
NTILE、PERCENT_RANK、CUME_DISTを使うと、分布を分析できます。
- 分位点バケットにはNTILE
- p50/p95/p99の統計値にはPERCENTILE_CONT/DISC
- PARTITION BYと組み合わせてグループごとに分析
クイックチェック
応答時間の列からp95レイテンシーを求める必要があります。どの関数を使いますか?
AI チューターと学ぶ SQL — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 46
- レッスン
- 183
よくある質問
「NTILEとCume_Distによるバケット分割」レッスンは無料ですか?
はい。「NTILEとCume_Distによるバケット分割」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「NTILEとCume_Distによるバケット分割」で何を学びますか?
NTILEで行をN個の同じサイズのバケットに分割し、CUME_DISTとPERCENT_RANKで累積分布を計算します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「NTILEとCume_Distによるバケット分割」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- フレーム句:ROWSとRANGE
- フレームウィンドウでのLag/Lead
- NTILEとCume_Distによるバケット分割
- 実務で使うレポートパターン