5.7.2 Groepsfuncties Flashcards
Geef het aantal medewerkers per afdeling
SELECT afd, COUNT(mnr) aantal
FROM medewerkers
GROUP BY afd;
– Of als je echt de naam van de afdeling wilt tonen:
SELECT a.naam afdeling, COUNT(m.mnr) aantal
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
GROUP BY a.naam
Geef het gemiddelde salaris per afdeling
SELECT afd, AVG(maandsal)
FROM medewerkers
GROUP BY afd;
Of als je echt de naam van de afdeling wilt tonen:
SELECT a.naam “afdeling”, AVG(m.maandsal) “gemiddeld salaris”
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
GROUP BY a.naam;
Geef het aantal medewerkers per afdeling, maar enkel voor de afdelingen waar in de afdelingsnaam een OO zit
SELECT a.naam afdeling, COUNT(m.mnr) aantal
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
WHERE a.naam LIKE ‘%OO%’
GROUP BY a.naam;
select m.afd, count(m.mnr)
from medewerkers m
where m.afd in
(select a.anr
from afdelingen a
where naam like ‘%OO%’)
group by m.afd;
Geef het aantal medewerkers voor alle afdelingen behalve de afdeling 10.
SELECT afd, COUNT(mnr) aantal
FROM medewerkers
WHERE afd != 10
GROUP BY afd;
Geef het maximum en het minimum salaris en de afdelingsnaam per afdeling
SELECT a.naam, MAX(m.maandsal), MIN(m.maandsal)
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
GROUP BY a.naam;
Geef de naam en het salaris van de medewerker die het meest verdient.
SELECT naam, maandsal
FROM medewerkers
WHERE maandsal = (SELECT MAX(maandsal) FROM medewerkers);
Geef per afdeling en per functie het aantal medewerkers en het gemiddelde salaris.
SELECT afd, functie, COUNT(mnr), AVG(maandsal)
FROM medewerkers
GROUP BY afd, functie
ORDER BY afd, functie;
Geef per afdeling het gemiddelde salaris voor die afdelingen waar meer dan 3 medewerkers werken.
SELECT afd, AVG(maandsal)
FROM medewerkers
GROUP BY afd
HAVING COUNT(mnr) > 3;
Geef per afdeling de naam van de afdeling en de naam van de medewerker(s) die het meest verdient.
select a.naam, m.naam
from medewerkers m
join afdelingen a
on a.anr = m.afd
and m.maandsal in
(select max(mm.maandsal)
from medewerkers mm
where m.afd = mm.afd)
group by a.naam;
Geef de namen van de medewerkers die een hoger salaris hebben dan het gemiddelde
SELECT naam
FROM medewerkers
WHERE maandsal > (SELECT AVG(maandsal) FROM medewerkers);
Geef de namen van de medewerkers die een hoger salaris ehbben dan het gemiddelde salaris van hun afdelingen
SELECT m.naam
FROM medewerkers m
WHERE m.maandsal >
(SELECT AVG(mm.maandsal)
FROM medewerkers mm
WHERE m.afd = mm.afd
GROUP BY mm.afd);
Geef het aantal curussen die elke medewerker gevolgd heeft (stijgend gesorteerd).
SELECT m.naam, COUNT(i.cursus) aantal
FROM medewerkers m
LEFT JOIN inschrijvingen i
ON i.cursist = m.mnr
GROUP BY m.naam
ORDER BY aantal ASC;
We doen een LEFT JOIN voor ook de medewerkers die geen cursussen volgden!
Wat is het gemiddelde salaris van de medewerkers die in dezelfde afdeling werken als ‘Den Ruyter’?
SELECT AVG(m.maandsal) gemiddelde
FROM medewerkers m
WHERE m.afd IN
(SELECT mm.afd
FROM medewerkers mm
WHERE mm.naam = ‘DEN RUYTER’);
Hoeveel medewerkers verdienen minder dan het gemiddelde salaris plus 200
SELECT COUNT(m.mnr)
FROM medewerkers m
WHERE m.maandsal < (SELECT AVG(mm.maandsal) + 200 FROM medewerkers mm);
Hoe heten de drie hoogst betaalde medewerkers?
SELECT m.naam
FROM medewerkers m
WHERE 3 >=
(SELECT COUNT(mm.mnr)
FROM medewerkers mm
WHERE mm.maandsal >= m.maandsal);
– Even tussendoor, in MySQL of PostgreSQL kan dit echter véél korter:
SELECT naam
FROM medewerkers
ORDER BY maandsal DESC
LIMIT 3;
– Of vanaf Oracle 12.1 en later volgens de ANSI/ISO standaard:
– (Stel dat je zit op Oracle 11, werkt dit niet…)
SELECT naam
FROM medewerkers
ORDER BY maandsal DESC
FETCH NEXT 3 ROWS ONLY;