Documente Academic
Documente Profesional
Documente Cultură
Angajati Departamente
AngajatID DepartamentID
DepartamentID ManagerID
SupervizorID NumeDepartament
Nume CodDepartament
Prenume
CNP
Strada
Numar
Oras Proiecte
Judet ProiectID
DepartamentID
Sex
DataNasterii NumeProiect
DataAngajarii CodProiect
Salariu Buget
TermenLimita
Intretinuti
IntretinutID
AngajatiProiecte
AngajatID
AngajatID
ProiectID
Nume
NrOreSaptamana
Prenume
Sex
DataNasterii
1. Afisati numele angajatilor care lucreaza mai mult de 20 de ore la cel putin un proiect la care
lucreaza si managerul departamentului din care fac parte.?
IN
2. Sa se determine numele si prenumele angajatilor care nu au persoane in intretinere si pentru care suma orelor
lucrate la proiecte este mai mare decat media orelor lucrate de angajatii departamentului cu ID-ul 1.
select a.angajatid, a.nume, a.prenume from angajati a where a.angajatid not in (select distinct a2.angajatid from
angajati a2, intretinuti i where a2.angajatid = i.angajatid) group by a.angajatid, a.nume, a.prenume having
((select sum(ap.nroresaptamana) from angajatiproiecte ap where a.angajatid = ap.angajatid) > (select
avg(nroresaptamana) from angajati a4, angajatiproiecte ap2 where a4.angajatid = ap2.angajatid and
a4.departamentid = 1))
3. Afisati numele departamentelor pentru care media salariilor angajatilor este mai mare decat media salariului
pe intreaga companie.
4. Afisati numele persoanelor aflate in intretinere, al caror intretinator lucreaza la cel putin 2 proiecte.
sau
Varianta 1
sau
sau
. Calculeaza Max( salariu) pentru FIECARE departament si-l leaga de id-ul departamentului (ia id-ul
departamentului din departamente cu JOIN
SalariuMaxim DepartamentID
1500.00 2
4500.00 1
. Selcteaza doar angajatii din angajati care au id departamennt si salariu in selectia galbena
Nume Prenume Salariu DepartamentID
Ionescu Marian 4500.00 1
Udrea Ioana 1500.00 2
Lungu Ioan 1500.00 2
Vasile Ion 1500.00 2
Sau
Sau
sau
2.--Gasiti cei mai recenti angajati din fiecare departament.Ordonati dupa data
angajarii.
Sau
sau
sau
CALCULEAZA AVG PENTRU GRUPUL FIECARUI ANGAJAT IN PARTE ATUNCI CAND VERIFICA
CONDITIA
sau
SELECT X.Nume, X.Prenume, Z.NumeDepartament, X.Salariu, Y.Salariu AS SalariuMediuPeDepartament
FROM Angajati X
JOIN (SELECT DepartamentID, AVG(Salariu) AS Salariu FROM Angajati GROUP BY DepartamentID) Y
ON X.DepartamentID = Y.DepartamentID AND X.Salariu >= Y.Salariu
JOIN Departamente Z ON X.DepartamentID = Z.DepartamentID
sau
SELECT A.Nume, A.Prenume, A.Salariu, D.NumeDepartament
FROM Angajati A, Departamente D
WHERE A.Salariu >= (SELECT AVG(A2.Salariu)
FROM Angajati A2
GROUP BY A2.DepartamentID
HAVING A2.DepartamentID = A.DepartamentID) AND A.DepartamentID =
D.DepartamentID;
sau
SELECT A.Nume, A.Prenume, A.Salariu, D.NumeDepartament FROM Angajati A JOIN
Departamente
D ON A.DepartamentID=D.DepartamentID
JOIN (SELECT DepartamentID,AVG(Salariu) SalM FROM Angajati GROUP BY DepartamentID)
Y ON A.DepartamentID=Y.DepartamentID AND A.Salariu >Y.SalM
sau
SELECT * from Departamente D
WHERE D.DepartamentID != ALL(SELECT A.DepartamentID FROM Angajati A);
sau
SELECT DepartamentID FROM Departamente D
WHERE (SELECT count(*) FROM angajati a WHERE a.DepartamentID=D. DepartamentID)=0
Sau
SELECT DepartamentID, NumeDepartament FROM Departamente D
WHERE NOT EXISTS(SELECT * FROM Angajati WHERE DepartamentID=D.DepartamentID)
Sau
SELECT D.DepartamentID FROM Departamente D WHERE D.DepartamentID NOT IN
(SELECT DepartamentID FROM Angajati GROUP BY DepartamentID
HAVING COUNT(AngajatID)> 0)
10
(SELECT count(*) FROM angajati WHERE a.salariu < salariu) -> numara pentru fiecare angajat cati au
salariul mai mare ca al lui
6. --In ce an s-au angajat cei mai multi in companie ? Afisati anul si numarul
angajatilor.
(cu observatia ca daca avem 2 ani diferiti cu acelasi numar de angajati va afisa doar unul)
SELECT top 1 year(dataangajarii) An, count(angajatid) NUMAR_DE_ANGAJATI FROM angajati group by
year(dataangajarii) order by count(angajatid) desc
sau
SELECT X.An, Q.AngajatiMax
FROM (SELECT Year(DataAngajarii) AS An, COUNT(DataAngajarii) AS Angajati FROM Angajati GROUP BY
YEAR(DataAngajarii)) X JOIN
(SELECT MAX(X.Angajati) AS AngajatiMax FROM
(SELECT Year(DataAngajarii) AS An, COUNT(DataAngajarii) AS Angajati FROM Angajati GROUP BY
YEAR(DataAngajarii)) X)Q ON X.Angajati = Q.AngajatiMax
Sau
FROM Angajati B
WHERE B.Salariu>2000)
15. --Sa se afiseze numele si salariul angajatilor al caror salariu este mai
mare decat
salariile medii din toate departamentele.
SELECT a.nume, a.prenume, a.Salariu
FROM Angajati a
WHERE a.Salariu > ALL (SELECT
avg(salariu) FROM
Angajati
GROUP BY DepartamentID)
Sau
sau