Используйте что-то вроде
select accounts.id,
count(distinct s1.id) as num_req,
count(distinct s2.id) as num_grab
from accounts left join subs as s1 on accounts.id = s1.requester_account_id
left join subs as s2 accounts.id = s2.grabber_account_id
group by accounts.id
Хитрость заключается в том, чтобы дважды использовать таблицу subs
: subs as s1
и subs as s2
, каждый раз, когда к нему присоединяется другое поле ....
Примечание относительно эффективности: я не уверен, но я считаю, что это решение быстрее, чем решение подзапроса, хотя не тестировал его (по крайней мере, оно не будет медленнее).Я всегда предпочитаю left join
подзапросу, когда это возможно.