Vuoi un join esterno per questo (e devi usare person come tabella di "guida")
SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments"
FROM person
LEFT JOIN appointment ON person.person_id = appointment.person_id
GROUP BY person.person_id;
Il motivo per cui funziona è che il join esterno (a sinistra) restituirà NULL
per coloro che non hanno appuntamento. La funzione aggregata count()
non conterà NULL
valori e quindi otterrai uno zero.
Se vuoi saperne di più sugli outer join, ecco un bel tutorial:http://sqlzoo.net/wiki/Using_Null