我有两个表accounts和subs.
第一台具有id与第二表有田id,requester_account_id,grabber_account_id
我想要计算帐户制作了多少个子请求,以及他做了多少抓取(基于是否requester_account_id/grabber_account_id填充了他的id)
在一个查询中
输出:
+------------+----------------+-----------------+
| account_id | subs_requested | subs_grabbed |
+------------+----------------+-----------------+
| 1 | 4 | 3 |
| 3 | 2 | 1 |
+------------+----------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
使用类似的东西
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
Run Code Online (Sandbox Code Playgroud)
诀窍是使用表subs两次:subs as s1并且subs as s2,每次加入不同的字段....
关于效率的注意事项:我不确定,但我相信这个解决方案比子查询解决方案更快,但没有经过测试(至少它不会慢).我总是喜欢left join可能的子查询.