null-waarden tellen met Join-query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Josh

Josh

14/03/2007 13:17:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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?
 
PHP hulp

PHP hulp

06/11/2024 05:47:40
 
Robert Deiman

Robert Deiman

14/03/2007 14:31:00
Quote Anchor link
Ik denk dat het met de Left Join of inner join heeft te maken (is dezelfde :P) Probeer het eens met een outer join.
 
Josh

Josh

14/03/2007 15:20:00
Quote Anchor link
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?
 
Bo az

Bo az

14/03/2007 16:11:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
last.maxeditie=NULL

Is het niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
last.maxeditie IS NULL
 
Josh

Josh

14/03/2007 16:15:00
Quote Anchor link
Boaz... Geniaal!!!

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



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.