Er is een overzicht gewenst die iets zegt over de deelnamehistorie van deelnemers die dit jaar voor een evenement staan ingeschreven.

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?
Ik denk dat het met de Left Join of inner join heeft te maken (is dezelfde :P) Probeer het eens met een outer join.
Als ik in plaats van LEFT JOIN er een OUTER JOIN neerzet, dan geeft MySQL een syntax fout op die OUTER JOIN.

Waarschijnlijk kan OUTER JOIN niet overweg met de items die bij SELECT staan?
last.maxeditie=NULL

Is het niet:
last.maxeditie IS NULL
Boaz... Geniaal!!!

Dat werkt
De query was me zo ingewikkeld dat ik aan zo'n detail nooit meer gedacht heb.
Bedankt!

Reageren