Per categorie zou ik de aantallen willen weten van:
- hoeveel deelnemers vorige editie (=13) hebben deelgenomen
- hoeveel deelnemers 2 edities (=12e) geleden hebben deelgenomen
- hoeveel deelnemers eerder hebben deelgenomen (<12)
- hoeveel deelnemers niet eerder hebben meegedaan.
Ik heb één tabel waarin alle deelname-gegevens staan, zoals deelnemerID, editie, inschrijvingsstatus, etc....
Onderstaande query heb ik inmiddels kunnen bakken, met hulp van topics die ik hier heb gevonden en wat eigen inzichten:
SELECT
d.categorie,
SUM(IF(last.maxeditie=13,1,0)) AS hist1,
SUM(IF(last.maxeditie=12,1,0)) AS hist2,
SUM(IF(last.maxeditie<12,1,0)) AS hist3,
SUM(IF(last.maxeditie=NULL,1,0)) AS hist4
FROM
deelname AS d
LEFT JOIN
(SELECT
dlnmrID,
max(editie) AS maxeditie
FROM
deelname
WHERE
editie<14
AND meegereden=1
GROUP BY
dlnmrID
) AS last
ON
d.dlnmrID=last.dlnmrID
WHERE
d.editie=14
AND d.inschrijvingsstatus=1
GROUP BY
d.categorie
Het werkt, behalve de aantallen deelnemers die nooit eerder hebben deelgenomen worden niet geteld (veld hist4 is 0 voor alle categoriën). Naar mijn idee zijn dat null-waarden die ik moet tellen. Maar die null-waarden lijken weg te vallen door de GROUP BY d.categorie ??
Hoe is dat op te lossen?
Is mijn query meest makkelijke manier? Of kan het nog makkelijker?