Potrzebujesz do tego zewnętrznego sprzężenia (i musisz użyć osoby jako tabeli „kierującej”)
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;
Powodem, dla którego to działa, jest to, że zewnętrzne (lewe) złącze zwróci NULL
dla tych osób, które nie mają umówionego spotkania. Funkcja agregująca count()
nie liczy NULL
wartości, a tym samym otrzymasz zero.
Jeśli chcesz dowiedzieć się więcej o złączeniach zewnętrznych, oto dobry samouczek:http://sqlzoo.net/wiki/Using_Null