Hulp bij een query
Ik heb een lijst 'dienst' waar alle diensten in staan vermeld. Als voorbeeld staat hierin:
ID - Naam - Datum - Dienst - Roepnummer
1 - Maarten - 5/9/2018 - Avond - Balie
2 - Maarten - 7/9/2018 - Ochtend - Balie
3 - Maarten - 8/9/2018 - Ochtend - Balie
4 - Maarten - 9/9/2018 - Avond - Lab
5 - Jan - 9/9/2018 - Avond - Lab
6 - Piet - 8/9/2018 - Avond - Balie
Nu wil ik een overzicht krijgen met iedereen die in dienst is op 9/9/2018 in de avonddienst met daarachter hoevaak die persoon Balie heeft gedaan (van alle items). Dus:
Op 9/9/2018 in de avonddienst zijn de volgende personen:
Maarten - Balie (3x)
Jan - Balie (0x)
Code (php)
1
2
3
4
5
6
2
3
4
5
6
select dienst.naam,
dienst.roepnummer,
concat("Balie (", coalesce(aantal.diensten, 0), "x)") as aantal
from dienst
left join (select naam, count(roepnummer) as diensten from dienst where roepnummer = 'Balie' group by naam) as aantal on dienst.naam = aantal.naam
where dienst.datum = '2018-9-9';
dienst.roepnummer,
concat("Balie (", coalesce(aantal.diensten, 0), "x)") as aantal
from dienst
left join (select naam, count(roepnummer) as diensten from dienst where roepnummer = 'Balie' group by naam) as aantal on dienst.naam = aantal.naam
where dienst.datum = '2018-9-9';
https://www.db-fiddle.com/f/mV3BitNLFnMUQ1EVaPAFtU/0
Gewijzigd op 26/10/2018 14:06:51 door Jeroen Jansen
On topic: kan dit niet simpelweg met een COUNT en een GROUP BY?
Uhm, die informatie die je wilt hebben:
- wie er op 9/9/2018 een avonddienst heeft gedraaid (en niet noodzakelijkerwijs balie)
- en wie er wel eens achter de balie heeft gestaan (op een willekeurige datum)
...
Wat hebben die twee verder met elkaar te maken? Dit lijkt mij compleet ongecorelleerd?
Logisch gezien zouden dit dan dus eigenlijk ook twee (aparte) queries moeten zijn lijkt mij.
Anyhow, als je dit dan toch zou willen combineren wordt het zoiets. De crux hierbij is dat je de conditie m.b.t. het roepnummer in de JOIN-conditie zelf zet.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT a.Naam, COUNT(b.ID) AS aantal
FROM tabel a
LEFT JOIN tabel b ON (b.Naam = a.Naam AND b.Roepnummer = 'Balie')
WHERE a.Dienst = 'Avond'
AND a.Datum = '9/9/2018'
GROUP BY a.Naam
FROM tabel a
LEFT JOIN tabel b ON (b.Naam = a.Naam AND b.Roepnummer = 'Balie')
WHERE a.Dienst = 'Avond'
AND a.Datum = '9/9/2018'
GROUP BY a.Naam
Gewijzigd op 26/10/2018 23:44:50 door Thomas van den Heuvel