Sunteți pe pagina 1din 14

1

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.?

select a.angajatid, a.nume, a.prenume, ap.proiectid


from angajati a, angajatiproiecte ap
where a.angajatid = ap.angajatid and ap.nroresaptamana > 20 and ap.proiectid
IN
(select ap2.proiectid from departamente d, angajatiproiecte ap2,angajati a2 where
d.managerid = a2.angajatid and a2.departamentid =d.departamentid and d.managerid =
ap2.angajatid)
2

select a.angajatid, a.nume, a.prenume, sum(ap.nroresaptamana) from angajati a,


angajatiproiecte ap
where a.angajatid = ap.angajatid and ap.proiectid

IN

(select ap2.proiectid from departamente d, angajatiproiecte ap2, angajati a2


where d.managerid = a2.angajatid and a2.departamentid = d.departamentid
and d.managerid = ap2.angajatid)
group by a.angajatid, a.nume, a.prenume having sum(ap.nroresaptamana)> 20

Selecteaza angajatii si id=ul sefului de departament


SELECT a.AngajatID,a.Nume,a.Prenume,d.ManagerID FROM Angajati a, departamente d where
a.DepartamentID=d.DepartamentID

AngajatID Nume Prenume ManagerID


1 Popescu Maria 2
2 Ionescu Marian 2
3 Udrea Ioana 5
5 Lungu Ioan 5
7 Cristea Dan 2
10 Ionescu Andrei 2
11 Vasile Ion 5
16 Udrea Elena 2
17 Aldea Eliza 2

Selecteaza angajatii si id=ul sefului de department si id-urile proiectelor la care


lucreaza seful departamentului fiecaruia
select c.AngajatID,c.Nume,c.Prenume,c.ManagerID, ap.proiectid from
(SELECT a.AngajatID,a.Nume,a.Prenume,d.ManagerID FROM Angajati a, departamente d where
a.DepartamentID=d.DepartamentID) c, angajatiproiecte ap
where c.ManagerID =ap.AngajatID

AngajatID Nume Prenume ManagerID proiectid


1 Popescu Maria 2 2
2 Ionescu Marian 2 2
3 Udrea Ioana 5 3
3 Udrea Ioana 5 5
5 Lungu Ioan 5 3
5 Lungu Ioan 5 5
7 Cristea Dan 2 2
10 Ionescu Andrei 2 2
3

Selecteaza angajatii si id=ul sefului de department si id-urile proiectelor la care


lucreaza seful departamentului fiecaruia apoi proiectele la care lucreaza angajatii
Si sunt din cele la care lucreaza sefii.
select e.AngajatID,e.Nume,e.Prenume,e.ManagerID, e.proiectidsef, apr.AngajatID,apr.ProiectID,
apr.NrOreSaptamana from
(select c.AngajatID,c.Nume,c.Prenume,c.ManagerID, ap.proiectid as proiectidsef from
(SELECT a.AngajatID,a.Nume,a.Prenume,d.ManagerID FROM Angajati a, departamente d where
a.DepartamentID=d.DepartamentID) c, angajatiproiecte ap
where c.ManagerID =ap.AngajatID) e, angajatiproiecte apr where e.AngajatID=apr.AngajatID and
e.proiectidsef=apr.ProiectID and apr.NrOreSaptamana > 20

AngajatID Nume Prenume ManagerID proiectidsef AngajatID ProiectID NrOreSaptamana


1 Popescu Maria 2 2 1 2 23.0
2 Ionescu Marian 2 2 2 2 40.0
3 Udrea Ioana 5 5 3 5 40.0

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

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.

select d.numedepartament, avg(a.salariu)as medieSal from departamente d, angajati a where


a.departamentid = d.departamentid group by d.departamentid, d.numedepartament having
avg(a.salariu) > (select avg(salariu) from angajati)
4

4. Afisati numele persoanelor aflate in intretinere, al caror intretinator lucreaza la cel putin 2 proiecte.

select i.nume, i.prenume from intretinuti i where i.angajatid in


(select a.angajatid from angajati a, angajatiproiecte ap where a.angajatid = ap.angajatid group by
a.angajatid having count(ap.proiectid) > 2)

5. Selectati angajatii care nu lucreaza la niciun proiect.


select a.nume, a.prenume from angajati a where a.angajatid not in
(select distinct a2.angajatid from angajati a2, angajatiproiecte ap where a2.angajatid = ap.angajatid)

sau

select a.nume, a.prenume from angajati a where a.angajatid


not in (select distinct angajatiproiecte.AngajatID from AngajatiProiecte)

6. Afisati numele si prenumele angajatilor care lucreaza la toate proiectele coordonate de


departamentul din care fac parte.

Varianta 1

select a.nume, a.prenume from angajati a


where
(select count(distinct p.proiectid) from angajatiproiecte ap, proiecte p where a.angajatid = ap.angajatid and
p.departamentid = a.departamentid and p.proiectid = ap.proiectid)
=
(select count(distinct p2.proiectid) from proiecte p2 where a.departamentid = p2.departamentid)
group by a.angajatid, a.nume, a.prenume

... numarul proiectelor din departamentul angajatului si la care lucreaza el

... numarul total proiectelor din departamentul angajatului

Count() se face pe grup


5

The COUNT(DISTINCT column_name) function returns the number of


distinct values of the specified column:
6

SELECT COUNT(DISTINCT column_name) FROM table_name;

SQL HAVING Syntax


The HAVING clause was added to SQL because the WHERE keyword could
not be used with aggregate functions.
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

Rezolvari exercitii laborator 6-Subcereri


1.--Gasiti angajatii care castiga cel mai mare salariu pentru fiecare
departament. Sortati inordinea descrescatoare a salariului.
SELECT a.nume, a.prenume, a.salariu, a.DepartamentID FROM angajati a
WHERE a.salariu IN
(SELECT max(a2.salariu) FROM angajati a2 WHERE a2. departamentID=a.departamentID
GROUP BY departamentID)
ORDER BY salariu DESC

. Calculeaza Max( salariu) pentru departamentul corespunzator din a conditia


a2. departamentID=a.departamentID

sau

SELECT a.nume,a.prenume,a.salariu,a.DepartamentID FROM Angajati A


WHERE a.salariu=(SELECT max(aa.salariu) FROM Angajati aa WHERE
aa.DepartamentID=a.DepartamentID )
ORDER BY a.Salariu DESC
. La fel ca mai sus dar se foloseste = in loc de IN pentru ca rezulta o singura valoare pe departament.
7

sau

SELECT A.Nume, A.Prenume, A.Salariu, D.DepartamentID FROM Angajati As A


INNER JOIN
( SELECT MAX(AA.Salariu) as SalariuMaxim, DD.DepartamentID
FROM Angajati as AA
INNER JOIN Departamente As DD on AA.DepartamentID = DD.DepartamentID
GROUP BY DD.DepartamentID) As D on A.DepartamentID = D.DepartamentID and D.SalariuMaxim =
A.Salariu
ORDER BY A.Salariu DESC

. Calculeaza Max( salariu) pentru FIECARE departament si-l leaga de id-ul departamentului (ia id-ul
departamentului din departamente cu JOIN

SELECT MAX(AA.Salariu) as SalariuMaxim, DD.DepartamentID


FROM Angajati as AA
INNER JOIN Departamente As DD on AA.DepartamentID = DD.DepartamentID
GROUP BY DD.DepartamentID

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

SELECT X.Nume, X.Prenume, Z.NumeDepartament, X.Salariu FROM Angajati X


JOIN (SELECT DepartamentID, MAX(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
ORDER BY X.Salariu DESC

Sau

SELECT A.DepartamentID, A.AngajatID, b.Sal FROM Angajati A


RIGHT JOIN
(SELECT DepartamentID,MAX(Salariu) Sal FROM Angajati group by DepartamentID ) b
on A.DepartamentID = b.DepartamentID and a.Salariu =b.sal order by b.sal desc
8

sau

SELECT a.nume,a.prenume,a.salariu,a.DepartamentID FROM Angajati A WHERE


a.salariu>= ALL(SELECT an.salariu FROM Angajati an WHERE an.DepartamentID=a.DepartamentID )
ORDER BY a.Salariu DESC

2.--Gasiti cei mai recenti angajati din fiecare departament.Ordonati dupa data
angajarii.

SELECT nume, prenume, departamentID, dataangajarii FROM angajati WHERE (dataangajarii) IN


(SELECT max(a2.dataangajarii) FROM angajati a2 WHERE a2.DepartamentID=angajati.departamentID
GROUP BY departamentID) ORDER BY dataangajarii

Sau

SELECT X.Nume, X.Prenume, Z.NumeDepartament, X.DataAngajarii FROM Angajati X


JOIN
(SELECT DepartamentID, MAX(DataAngajarii) AS DataAngajarii FROM Angajati GROUP BY DepartamentID) Y
ON X.DepartamentID = Y.DepartamentID AND X.DataAngajarii=Y.DataAngajarii
JOIN Departamente Z ON X.DepartamentID = Z.DepartamentID

sau

SELECT a.nume,a.prenume FROM Angajati a


WHERE a.DataAngajarii>=(SELECT max(aa.dataangajarii) FROM Angajati aa
WHERE aa.DepartamentID=a.DepartamentID) ORDER BY a.DataAngajarii

sau

SELECT A.DepartamentID, A.AngajatID, X.Ang FROM Angajati A


RIGHT JOIN
(SELECT DepartamentID,Min(DataAngajarii) Ang FROM Angajati GROUP BY DepartamentID) X
on X.DepartamentID=A.DepartamentID AND X.Ang=A.DataAngajarii
ORDER BY X.Ang

3. --Afisati numele, prenumele, salariul si numele departamentului la care


lucreaza pentru orice angajat care castiga un salariu mai mare decat media
pentru departamentul din care face parte.

SELECT a.nume, a.prenume, a.salariu,d.NumeDepartament FROM angajati a


INNER JOIN Departamente d ON a.DepartamentID =d.DepartamentID

WHERE salariu >(SELECT avg(salariu) FROM angajati WHERE a.departamentID =angajati.departamentID)


9

ORDER BY a.salariu DESC

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

4. --Listati toate departamentele care nu au angajati (folositi o subcerere)


SELECT NumeDepartament FROM Departamente WHERE DepartamentID NOT IN
(SELECT X.DepartamentID FROM Angajati X JOIN Departamente Y ON X.DepartamentID =
Y.DepartamentID)

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

5. --Afisati numele , prenumele si salariul primilor trei angajati in functie de


salariul
castigat.
Selecteaza top trei dupa salariu

SELECT top 3 a.nume,a.prenume, salariu FROM angajati a ORDER BY salariu DESC

SELECT a.nume, a.prenume, a.salariu, FROM angajati a


WHERE 3>(SELECT count(*) FROM angajati WHERE a.salariu < salariu) order by salariu desc

(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

SELECT year(dataangajarii) An, count(angajatid) NUMAR_DE_ANGAJATI FROM angajati


GROUP BY year(dataangajarii) HAVING count(angajatid)=(SELECT max(s.nrang) FROM (select
(count(angajatid)) AS nrang FROM angajati GROUP BY year(dataangajarii)) AS s)

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

SELECT X.An, Q.Angajati


FROM (SELECT Year(DataAngajarii) AS An, COUNT(DataAngajarii) AS Angajati FROM Angajati GROUP BY
YEAR(DataAngajarii)) X JOIN
(SELECT top 1 Year(DataAngajarii) AS An, COUNT(DataAngajarii) AS Angajati FROM Angajati GROUP BY
YEAR(DataAngajarii) order by COUNT(DataAngajarii) desc)Q ON X.Angajati = Q.Angajati

Sau

SELECT YEAR(DataAngajarii) AS An, COUNT(DataAngajarii) FROM Angajati GROUP BY YEAR(DataAngajarii)


HAVING COUNT(DataAngajarii) = (SELECT MAX(X.Angajati) AS AngajatiMax FROM (SELECT Year(DataAngajarii)
AS An, COUNT(DataAngajarii) AS Angajati
FROM Angajati
GROUP BY YEAR(DataAngajarii)) X)

SELECT YEAR(DataAngajarii) AS An, COUNT(DataAngajarii) FROM Angajati GROUP BY YEAR(DataAngajarii)


HAVING COUNT(DataAngajarii) = (SELECT MAX(X.Angajati) AS AngajatiMax FROM (SELECT Year(DataAngajarii)
AS An, COUNT(DataAngajarii) AS Angajati
FROM Angajati GROUP BY YEAR(DataAngajarii)) X)
11

SELECT An, Numar


FROM (SELECT Year(dataAngajarii) as An, count(AngajatID)as Numar FROM Angajati GROUP BY
Year(DataAngajarii)) A
GROUP BY An, Numar
HAVING A.Numar=(SELECT max(Numar) FROM
(select Year(dataAngajarii) as An,count(AngajatID)as Numar FROM Angajati GROUP BY
Year(DataAngajarii)) B)

SELECT YEAR(DataAngajarii) AS An, COUNT(DataAngajarii) as Nr FROM Angajati GROUP BY


YEAR(DataAngajarii)
HAVING COUNT(YEAR(DataAngajarii)) >= ALL(SELECT COUNT(YEAR(A.DataAngajarii)) FROM Angajati A GROUP BY
YEAR(A.DataAngajarii))

7. --Aflati angajatii care au salariul mai mare decat vreun angajat al


departamentului cu
ID-ul 2 si care nu fac parte din acest departament.
SELECT nume, prenume, departamentID, salariu FROM angajati
WHERE (salariu > ANY (SELECT salariu FROM angajati WHERE departamentID = 2)) AND departamentID <> 2

SELECT * FROM Angajati A


WHERE A.Salariu > ALL(SELECT A2.Salariu FROM Angajati A2 WHERE A2.DepartamentID = 2) and
A.DepartamentID != 2

SELECT nume, sal


FROM (SELECT a.nume+ ' ' +a.prenume as nume, a.salariu as sal FROM angajati a
WHERE a.departamentid<>2) as ad
GROUP BY nume, sal
HAVING ad.sal>(SELECT min(d.sal) FROM (SELECT a.nume+ ' ' +a.prenume as nume,
a.salariu as sal FROM angajati a WHERE a.departamentid=2) as d)

8. --Gasiti angajatii care au salariul mai mare decat toti angajatii


departamentului cu ID-ul 5.
SELECT nume, prenume, departamentID, salariu
FROM angajati
WHERE salariu > ALL (SELECT salariu FROM angajati WHERE departamentid = 5)

9. --Gasiti numele, data angajarii si salariul angajatilor al caror salariu este


mai mare decat
cel mai mare salariu al vreunei persoane angajate dupa data de 01.01.2007.

SELECT nume, prenume, dataangajarii, salariu FROM angajati


WHERE salariu >
12

(SELECT max(salariu) FROM angajati WHERE dataangajarii IN


(SELECT dataangajarii FROM angajati WHERE dataangajarii >'01/01/2007'))

SELECT nume, prenume, dataangajarii, salariu FROM angajati


WHERE salariu >
(SELECT max(salariu) FROM angajati WHERE dataangajarii >'01/01/2007')

10. --Gasiti angajatii care nu au subordonati.


SELECT nume, prenume
FROM angajati
WHERE angajatID NOT IN (SELECT a.AngajatID
FROM angajati a, angajati s
WHERE a.SupervizorID = s.AngajatID and SupervizorID IS NOT NULL )
sau
SELECT A.Nume, A.Prenume
FROM Angajati A
WHERE A.AngajatID NOT IN
( SELECT
A.SupervizorID FROM
Angajati A
WHERE A.SupervizorID >= 1
GROUP BY A.SupervizorID
)
sau

SELECT distinct a.nume, a.prenume, a.AngajatID FROM angajati a


WHERE a.AngajatID not in
( SELECT distinct SupervizorID FROM angajati where SupervizorID is not null)

11. --Gasiti angajatii care au cel putin 2 persoane in intretinere.


SELECT a.nume, a.prenume
FROM angajati a INNER JOIN Intretinuti i ON a.AngajatID=i.angajatid
GROUP BY i.AngajatID, a.Nume, a.Prenume
HAVING count(i.IntretinutID) >=2
12. --Afisati numele si departamentul angajatilor care ii sunt subordonati
angajatului cu
numele Popescu.
SELECT a.nume, a.prenume, d.numedepartament
FROM Angajati a inner join Departamente d ON a.DepartamentID = d.DepartamentID
inner JOIN angajati s ON a.SupervizorID = s.AngajatID
WHERE s.Nume = 'Popescu'
sau
SELECT A.Nume, A.Prenume,
13

A.DepartamentID FROM Angajati A


WHERE A.SupervizorID
IN ( SELECT
AngajatID FROM
Angajati
WHERE Nume = 'Popescu')
13. -- Sa se afiseze numele, prenumele si salariul angajatului insotit de codul
managerului sau,
pentru angajatii al caror salariu este mai mic de 1500 lei.
SELECT a.nume, a.prenume, a.Salariu, s.nume, s.prenume
FROM angajati a INNER join angajati s ON a.SupervizorID = s.AngajatID
WHERE a.Salariu < 1500
sau
SELECT A.Nume, A.Prenume, A.Salariu, D.ManagerID
FROM Angajati A
JOIN Departamente D
ON D.DepartamentID = A.DepartamentID
WHERE A.AngajatID IN (
SELECT AngajatID FROM Angajati
WHERE Salariu < 1500)
sau
SELECT A.Nume, A.Prenume,A.salariu, (SELECT D.ManagerID
FROM Departamente D WHERE
A.DepartamentID=D.DepartamentID) As
Manager
FROM Angajati A
WHERE A.Salariu<1500
14. --Sa se afiseze numele salariatilor care lucreaza intr-un departament in
care exista cel
puin un angajat cu salariul cu salariul mai mare de 2000 lei.
SELECT a.nume, a.prenume, a.DepartamentID
FROM Angajati a
WHERE a.DepartamentID IN (SELECT
DepartamentID FROM Departamente d
WHERE EXISTS (SELECT angajatid FROM angajati a2
WHERE a2.DepartamentID= d.DepartamentID AND a2.Salariu > 2000))
sau
SELECT Nume, Prenume
FROM Angajati
WHERE DepartamentID IN ( SELECT DepartamentID
FROM Angajati
WHERE Salariu > 2000
GROUP BY DepartamentID)
sau
SELECT A.Nume, A.Prenume
FROM Angajati A
WHERE A.DepartamentID IN (SELECT Distinct B.DepartamentID
14

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

SELECT A.Nume, A.Prenume, A.Salariu,


D.DepartamentID FROM Angajati AS A JOIN
Departamente AS D
ON A.DepartamentID = D.DepartamentID
WHERE Salariu > ALL (SELECT AVG(Salariu) AS MEDIE FROM Angajati
GROUP BY DepartamentID)

Exercitiu suplimentar. Sa se afiseze numele, prenumele si media nr de ore


lucrate de
fiecare angajat pe saptamana la toate proiectele la care lucreaza.
SELECT X.Nume, X.Prenume, Y.MedieOreSapt
FROM Angajati X JOIN
(SELECT AngajatID, AVG(NrOreSaptamana) AS MedieOreSapt
FROM AngajatiProiecte
GROUP BY AngajatID) Y
ON X.AngajatID = Y.AngajatID

sau

SELECT A.Nume, A.Prenume, AVG(AP.NrOreSaptamana) as


'medie' FROM Angajati A, AngajatiProiecte AP
WHERE A.AngajatID=AP.AngajatID
GROUP BY A.Nume,A.Prenume

S-ar putea să vă placă și