Hulp bij een query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Maarten Samuels

Maarten Samuels

26/10/2018 12:30:23
Quote Anchor link
Ik ben op zoek naar een mogelijkheid om het volgende resultaat te krijgen.


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

PHP hulp

28/03/2024 16:43:52
 
Jeroen Jansen

Jeroen Jansen

26/10/2018 14:04:16
Quote Anchor link
Ik zou dan een sub-query joinen waarin de telling wordt gedaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';


https://www.db-fiddle.com/f/mV3BitNLFnMUQ1EVaPAFtU/0
Gewijzigd op 26/10/2018 14:06:51 door Jeroen Jansen
 
Thomas van den Heuvel

Thomas van den Heuvel

26/10/2018 16:14:45
Quote Anchor link
Ik hoop dat je de datums niet letterlijk als "5/9/2018" hebt opgeslagen, dit maakt ze namelijk nogal ongeschikt om goed mee te kunnen rekenen.

On topic: kan dit niet simpelweg met een COUNT en een GROUP BY?
EDIT: ah, ook de mensen die geen dienst hadden op die post, dan moet je iets met een LEFT JOIN idd.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 26/10/2018 23:44:50 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.