Я думаю, что это подойдет:
SELECT COUNT(DISTINCT profile_question_id)
FROM
( SELECT profile_question_id
FROM ProfileAnswer an
JOIN ProfileQuestion qu
ON qu.id = an.profile_question_id
WHERE contact_id IN ( id1, id2 )
GROUP BY profile_question_id
, value
HAVING COUNT(*) = 2
) AS grp
И JOIN
, похоже, не будет использоваться.Поэтому, если ProfileAnswer.profile_question_id
равно NOT NULL
, этого будет достаточно:
SELECT COUNT(*)
FROM
( SELECT profile_question_id
FROM ProfileAnswer
WHERE contact_id IN ( id1, id2 )
GROUP BY profile_question_id
, value
HAVING COUNT(*) = 2
) AS grp
РЕДАКТИРОВАНИЕ для двух конкретных контактов (с идентификаторами id1
и id2
).
Добавил WHERE
и изменил COUNT (DINSTINCT )
на COUNT(*)
.
Возможно, эту версию с JOIN легче адаптировать к ActiveRecord.
Использование JOIN
SELECT COUNT(*)
FROM ProfileAnswer a
JOIN ProfileAnswer b
ON a.profile_question_id = b.profile_question_id
AND a.value = b.value
WHERE a.contact_id = id1
AND b.contact_id = id2