0Pricing
SQL Academy · Lekcja

Grupowanie za pomocą NTILE i Cume_Dist

Dzielić wiersze na N równolicznych przedziałów za pomocą NTILE oraz obliczać rozkład skumulowany za pomocą CUME_DIST i PERCENT_RANK

Grupowanie za pomocą NTILE i Cume_Dist to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

NTILE: przedziały o równej wielkości

NTILE(n) dzieli uporządkowane wiersze na n przedziałów o w przybliżeniu równej wielkości:

SELECT id, total,
       NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 2 = next, 3, 4 = top 25%

Przedziały percentylowe

NTILE(10) służy do decyli, a NTILE(100) do percentyli:

SELECT id, score,
       NTILE(100) OVER (ORDER BY score DESC) AS percentile
FROM students;
-- percentile 1 = top 1%

PERCENT_RANK

Ranga względna jako liczba zmiennoprzecinkowa z przedziału [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

Ułamek wierszy o wartości mniejszej lub równej wartości bieżącego wiersza:

SELECT id, score,
       CUME_DIST() OVER (ORDER BY score) AS cume_dist
FROM students;
-- "What share of students scored ≤ this one?"

Statystyki percentylowe za pomocą PERCENTILE_CONT

Oblicz wartość dla danego percentyla (interpolacja ciągła):

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

Działa podobnie do PERCENTILE_CONT, ale zwraca rzeczywistą istniejącą wartość zamiast wartości interpolowanej:

PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY total)

NTILE na partycjach

Twórz przedziały osobno dla użytkownika, kategorii itp.:

SELECT user_id, total,
       NTILE(4) OVER (PARTITION BY user_id ORDER BY total) AS user_quartile
FROM orders;

Histogram za pomocą NTILE

Utwórz przedziały histogramu:

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;

Agregowanie według przedziałów

Po podziale na przedziały oblicz statystyki dla każdego z nich:

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;

Łączenie funkcji okna

Połącz je w jednym zapytaniu, aby utworzyć rozbudowany raport:

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);

Kiedy NTILE wprowadza w błąd

Remisy według ORDER BY mogą prowadzić do nierównych rozmiarów przedziałów (NTILE nie uwzględnia remisów). Należy użyć kolumny rozstrzygającej remisy.

Podsumowanie

NTILE + PERCENT_RANK + CUME_DIST obejmują analizę rozkładu danych.

  • NTILE do tworzenia przedziałów kwantylowych
  • PERCENTILE_CONT/DISC do statystyk p50/p95/p99
  • Połącz z PARTITION BY, aby analizować poszczególne grupy

Szybki test

Potrzebują Państwo opóźnienia p95 z kolumny zawierającej czasy odpowiedzi. Której funkcji należy użyć?

Często zadawane pytania

Czy lekcja „Grupowanie za pomocą NTILE i Cume_Dist” jest bezpłatna?

Tak — pełny tekst „Grupowanie za pomocą NTILE i Cume_Dist” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Grupowanie za pomocą NTILE i Cume_Dist”?

Dzielić wiersze na N równolicznych przedziałów za pomocą NTILE oraz obliczać rozkład skumulowany za pomocą CUME_DIST i PERCENT_RANK Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Grupowanie za pomocą NTILE i Cume_Dist”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klauzule ramki: ROWS a RANGE
  2. LAG/LEAD z oknami ramki
  3. Grupowanie za pomocą NTILE i Cume_Dist
  4. Wzorce raportowania z rzeczywistego świata
← Powrót do SQL Academy