Ce face NTILE()
NTILE(n) împarte rândurile ordonate în n grupe numerotate de la 1. Este folosit pentru quartile, decile sau pentru a împărți clienții în categorii (mici, medii, mari).
Dacă rândurile nu se împart exact, primele grupe primesc câte un rând în plus.
Parametri
| Parametru | Descriere |
|---|---|
n |
Numărul de grupe. |
Ce returnează
Numărul grupei, de la 1 la n.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE vanzari (
agent VARCHAR(20),
oras VARCHAR(20),
luna INT,
suma INT
);
INSERT INTO vanzari VALUES
('Ana', 'Iași', 1, 1200), ('Ana', 'Iași', 2, 1500), ('Ana', 'Iași', 3, 900),
('Dan', 'Cluj', 1, 900), ('Dan', 'Cluj', 2, 900), ('Dan', 'Cluj', 3, 1700),
('Ioana', 'Iași', 1, 2000), ('Ioana', 'Iași', 2, 1100);
Exemplul 1: Vânzările împărțite în 3 categorii
SELECT agent, luna, suma,
ELT(NTILE(3) OVER (ORDER BY suma DESC, agent, luna), 'mare', 'medie', 'mică') AS categorie
FROM vanzari
ORDER BY suma DESC, agent, luna;
Rezultat
+-------+------+------+-----------+
| agent | luna | suma | categorie |
+-------+------+------+-----------+
| Ioana | 1 | 2000 | mare |
| Dan | 3 | 1700 | mare |
| Ana | 2 | 1500 | mare |
| Ana | 1 | 1200 | medie |
| Ioana | 2 | 1100 | medie |
| Ana | 3 | 900 | medie |
| Dan | 1 | 900 | mică |
| Dan | 2 | 900 | mică |
+-------+------+------+-----------+
Greșeli frecvente
- Te aștepți ca grupele să fie după valoare (ex. 0-1000, 1000-2000).
NTILE()împarte după numărul de rânduri, nu după intervale de valori.
Comenzi înrudite
PERCENT_RANK(): Poziția relativă a unui rând, între 0 și 1: (loc − 1) / (rânduri − 1).CUME_DIST(): Distribuția cumulativă: ce parte din rânduri are o valoare mai mică sau egală.ROW_NUMBER(): Numerotează rândurile 1, 2, 3… în fiecare grup, fără să le comprime ca GROUP BY.