SQL Academy · レッスン

NTILEとCume_Distによるバケット分割

NTILEで行をN個の同じサイズのバケットに分割し、CUME_DISTとPERCENT_RANKで累積分布を計算します。

レッスン 3/413 ステップ

「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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. フレーム句:ROWSとRANGE
  2. フレームウィンドウでのLag/Lead
  3. NTILEとCume_Distによるバケット分割
  4. 実務で使うレポートパターン
← SQL Academyに戻る