5.7.2 Groepsfuncties Flashcards

1
Q

Geef het aantal medewerkers per afdeling

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Geef het gemiddelde salaris per afdeling

A

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;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Geef het aantal medewerkers per afdeling, maar enkel voor de afdelingen waar in de afdelingsnaam een OO zit

A

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;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Geef het aantal medewerkers voor alle afdelingen behalve de afdeling 10.

A

SELECT afd, COUNT(mnr) aantal
FROM medewerkers
WHERE afd != 10
GROUP BY afd;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Geef het maximum en het minimum salaris en de afdelingsnaam per afdeling

A

SELECT a.naam, MAX(m.maandsal), MIN(m.maandsal)
FROM medewerkers m
JOIN afdelingen a
ON m.afd = a.anr
GROUP BY a.naam;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Geef de naam en het salaris van de medewerker die het meest verdient.

A

SELECT naam, maandsal
FROM medewerkers
WHERE maandsal = (SELECT MAX(maandsal) FROM medewerkers);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Geef per afdeling en per functie het aantal medewerkers en het gemiddelde salaris.

A

SELECT afd, functie, COUNT(mnr), AVG(maandsal)
FROM medewerkers
GROUP BY afd, functie
ORDER BY afd, functie;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Geef per afdeling het gemiddelde salaris voor die afdelingen waar meer dan 3 medewerkers werken.

A

SELECT afd, AVG(maandsal)
FROM medewerkers
GROUP BY afd
HAVING COUNT(mnr) > 3;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Geef per afdeling de naam van de afdeling en de naam van de medewerker(s) die het meest verdient.

A

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;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Geef de namen van de medewerkers die een hoger salaris hebben dan het gemiddelde

A

SELECT naam
FROM medewerkers
WHERE maandsal > (SELECT AVG(maandsal) FROM medewerkers);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Geef de namen van de medewerkers die een hoger salaris ehbben dan het gemiddelde salaris van hun afdelingen

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Geef het aantal curussen die elke medewerker gevolgd heeft (stijgend gesorteerd).

A

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!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wat is het gemiddelde salaris van de medewerkers die in dezelfde afdeling werken als ‘Den Ruyter’?

A

SELECT AVG(m.maandsal) gemiddelde
FROM medewerkers m
WHERE m.afd IN
(SELECT mm.afd
FROM medewerkers mm
WHERE mm.naam = ‘DEN RUYTER’);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Hoeveel medewerkers verdienen minder dan het gemiddelde salaris plus 200

A

SELECT COUNT(m.mnr)
FROM medewerkers m
WHERE m.maandsal < (SELECT AVG(mm.maandsal) + 200 FROM medewerkers mm);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hoe heten de drie hoogst betaalde medewerkers?

A

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;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wat zijn de namen en de salarissen van de vijf laagst betaalde medewerkers?

A

SELECT m.naam, m.maandsal
FROM medewerkers m
WHERE 5 >=
(SELECT COUNT(mm.mnr)
FROM medewerkers mm
WHERE mm.maandsal <= m.maandsal);

17
Q

Idem vraag 16 maar sorteer het resultaat dalend op salaris.

A

SELECT m.naam, m.maandsal
FROM medewerkers m
WHERE 5 >=
(SELECT COUNT(mm.mnr)
FROM medewerkers mm
WHERE mm.maandsal <= m.maandsal)
ORDER BY m.maandsal DESC;

18
Q

Hoe heten de 3 meest verdiende verkopers?

A

SELECT m.naam
FROM medewerkers m
WHERE
m.functie = ‘VERKOPER’ AND
3 >=
(SELECT COUNT(mm.mnr)
FROM medewerkers mm
WHERE mm.functie = ‘VERKOPER’ AND mm.maandsal >= m.maandsal);

19
Q

Welke is van alle gemiddelde maandsalarissen per afdeling het hoogste gemiddelde maandsalaris?

A

SELECT MAX(AVG(maandsal))
FROM medewerkers
GROUP BY afd;

SELECT MAX(sub.gemiddelde) AS gemiddelde
FROM
(SELECT AVG(maandsal) gemiddelde
FROM medewerkers
GROUP BY afd) sub;

20
Q

Welke afdeling (naam) heeft het hoogste gemiddelde maandsalaris?

A

SELECT a.naam
FROM afdelingen a
JOIN medewerkers m
ON a.anr = m.afd
GROUP BY a.naam
HAVING
AVG(m.maandsal) =
(SELECT MAX(AVG(mm.maandsal))
FROM medewerkers mm
GROUP BY mm.afd);

21
Q

Op welke datum is voor het laatst een cursus gepland?

A

SELECT MAX(begindatum)
FROM uitvoeringen;

Of meer informatie tonen:
SELECT cursus, begindatum, locatie
FROM uitvoeringen
JOIN
(SELECT MAX(begindatum) laatste
FROM uitvoeringen) u
ON begindatum = u.laatste;

22
Q

22) Geef de resultaatqueries zoals beschreven in de syllabus.

A

break on afd skip 1;
compute avg label ‘GEMIDDELDE’ of avg(maandsal) on afd;
compute count label ‘AANTAL’ of count(mnr) on afd;

select afd, functie, count(mnr), avg(maandsal)
from medewerkers
group by afd, functie
order by afd, functie;

clear computes;
clear breaks;