Для получения количества строк с ненулевыми значениями вы можете использовать count и left join
Для одного идентификатора, например: 1
SELECT qa.title, t1.answers_num, t2.votes_num
FROM question_and_answer qa
LEFT JOIN (
SELECT qa.title, count(c.related_id) answers_num
FROM question_and_answer qa
LEFT JOIN question_and_answer c ON qa.id = c.related_id
GROUP BY qa.title
) t1 on t1.title = qa.title
LEFT JOIN (
SELECT qa.title, count(v.post_id) votes_num
FROM question_and_answer qa
LEFT JOIN votes v on qa.id = v.post_id
GROUP BY qa.title
) t2 ON t2.title = qa.title
WHERE qa.id = 1;
Для всех идентификаторов
SELECT qa.title, t1.answers_num, t2.votes_num
FROM question_and_answer qa
LEFT JOIN (
SELECT qa.title, count(c.related_id) answers_num
FROM question_and_answer qa
LEFT JOIN question_and_answer c ON qa.id = c.related_id
) t1 on t1.title = qa.title
LEFT JOIN (
SELECT qa.title, count(v.post_id) votes_num
FROM question_and_answer qa
LEFT JOIN votes v on qa.id = v.post_id
) t2 ON t2.title = qa.title
для определения количества отличных ненулевых значений, которые вы можете использовать
Для одного идентификатора, например: 1
SELECT qa.title, c.count(distinct related_id) answers_num
, v.count(distinct post_id) votes_num
FROM question_and_answer qa
LEFT JOIN question_and_answer c ON qa.id = c.related_id
LEFT JOIN votes v on qa.id = v.post_id
WHERE qa.id = 1;
Для всех идентификаторов
SELECT qa.title, c.count(distinct related_id) answers_num
, v.count(distinct post_id) votes_num
FROM question_and_answer qa
LEFT JOIN question_and_answer c ON qa.id = c.related_id
LEFT JOIN votes v on qa.id = v.post_id
WHERE related_id is null
group by qa.title;