Folosirea functiei NTILE() in Sql Server
Una dintre functiile nedreptatite din sql server (in sensul ca este foarte putin cunoscuta si folosita) este NTILE().
Daca primim o cerinta de la departamentele de business in care ni se cere sa impartim salariatii in 3 echipe in fuctie de topul salariilor (fara sa tinem cont de departamente), am putea sa realizam acest lucru folosind tabele temporare sau un cursor.
O varianta mult mai eleganta si mai simpla este insa functia NTILE().
Aceasta functie primeste si ea doi parametrii:
– primul este un intreg si reprezinta numarul de partitionari dorite (ca sa fie mai clar reprezinta in cate echipe sa imparta numarul de angajati din tabela test_angajati)
– al doilea parametru este o coloana (sau mai multe) din tabela si reprezinta coloana (sau coloanele) de care sa tina cont cand face aceasta partitionare.
Pentru a fi foarte clar, in scriptul de mai jos am creat o tabela in care am inserat valori:
drop table test_angajati
create table test_angajati
(
id int identity (1,1),
nume varchar(max),
departament varchar(max),
varsta int,
salariu int
)
insert into test_angajati
values (‘Georgescu Mihai’, ‘IT’,24, 2400)
insert into test_angajati
values (‘Popescu Ionel’, ‘Contabilitate’,70, 7000)
insert into test_angajati
values (‘Popescu Mihai’, ‘Distributie’,45, 4500)
insert into test_angajati
values (‘Marinescu Elena’, ‘Contabilitate’,56, 6900)
insert into test_angajati
values (‘Calimanescu Geo’, ‘IT’,24, 2400)
insert into test_angajati
values (‘Eminescu Mihai’, ‘IT’,37, 3800)
insert into test_angajati
values (‘Ionescu Bogdan’, ‘Distributie’,38, 3800)
insert into test_angajati
values (‘Ionescu Emil’, ‘Contabilitate’,70, 7000)
insert into test_angajati
values (‘Ionescu Costin’, ‘Contabilitate’,69, 6900)
insert into test_angajati
values (‘Ionescu Gogu’, ‘Contabilitate’,20, 4300)
select * from test_angajati
id nume departament varsta salariu
1 Georgescu Mihai IT 24 2400
2 Popescu Ionel Contabilitate 70 7000
3 Popescu Mihai Distributie 45 4500
4 Marinescu Elena Contabilitate 56 6900
5 Calimanescu Georgeta IT 24 2400
6 Eminescu Mihai IT 37 3800
7 Ionescu Bogdan Distributie 38 3800
8 Ionescu Emil Contabilitate 70 7000
9 Ionescu Costin Contabilitate 69 6900
10 Ionescu Gogu Contabilitate 20 4300