Если вы хотите посчитать количество различных объектов, используйте count(distinct)
:
SELECT p.id,
COUNT(DISTINCT CASE WHEN pf.facility_code in ('S','H','E') THEN pf.facility_code END) as facility_count
FROM people p JOIN
people_facilities pf
ON p.ID = pf.ID
GROUP BY p.id;
Ваш запрос подозрительный. Я бы ожидал, что JOIN
будет больше похоже на pf.PeopleID = p.id
.
Если нет, этот запрос можно упростить, удалив JOIN
, потому что ID
, по которому вы агрегируете, находится в таблице people_facilities
. Я также подозреваю, что условие может быть перемещено в предложение WHERE
:
SELECT pf.id, COUNT(DISTINCT pf.facility_code) as facility_count
FROM people_facilities pf
WHERE pf.facility_code IN ('S', 'H', 'E')
GROUP BY pf.id;