Я пытаюсь показать список клиентов и количество оценок, которые они оставили по типу. Однако результаты подсчетов не являются точными.
Это происходит на SQL сервере.
Я собрал репрезентативную схему и тестовые данные здесь: http://sqlfiddle.com/#! 9 / 97908f3 / 5
select customer.custid, customer.name,
(
select count(eventid) from event
where type in ('x', 'y')
and rating = 'good'
and event.stayid = stay.stayid
) as 'Goods',
(
select count(eventid) from event
where type in ('x', 'y')
and rating = 'ok'
and event.stayid = stay.stayid
) as 'OKs',
(
select count(eventid) from event
where type in ('x', 'y')
and rating = 'bad'
and event.stayid = stay.stayid
) as 'Bads'
from customer, stay
where stay.custid = customer.custid
Результаты показывают:
custid name Goods OKs Bads
1 Jane 1 0 1
2 Alice 1 0 1
Согласно данным, у Алисы не должно быть 1 хорошего отзыва. Я пробовал тот же запрос, что и объединения, но получил ту же проблему.
Что я делаю неправильно, когда пытаюсь запросить одну и ту же таблицу для нескольких подсчетов в строке?