从朋友请求中查找接受率

时间:2017-08-16 15:09:33

标签: sql

根据两个表 Friend_request (requester_id, sent_to_id , time) Request_accepted (acceptor_id, requestor_id, time) ,找出请求的总体接受率。

所以我的代码/基本逻辑如下:

select count(acceptor_id)/count(requester_id)
from Friend_Request left join Request_Accepted
on Friend_Request.sent_to_id = Request_Accepted.acceptor_id
where  Request_Accepted.acceptor_id is not null

那会是正确的吗?

3 个答案:

答案 0 :(得分:0)

理论上它几乎是正确的。

SELECT count(ra.acceptor_id) / count(fr.requester_id)
FROM Friend_Request fr
LEFT JOIN Request_Accepted ra ON ra.acceptor_id = fr.sent_to_id

只需删除WHERE,因为您希望NULL表中的行Request_Accepted接受者。否则它将是相同的数字除以相同的数字。

编辑:虽然您必须考虑他们是否在一次接受时发送了多个请求......那么这就是一堆不同的蠕虫。

答案 1 :(得分:0)

我以略有不同的方式处理了这个问题,并认为我会分享。

( SELECT COUNT(DISTINCT requester_id, accepter_id)
  FROM request_accepted) / 
( SELECT COUNT(DISTINCT sender_id, send_to_id)
  FROM friend_request)

答案 2 :(得分:-1)

我想会有一个更有效的解决方案。

由于所有请求操作都存储在Friend_request表中,并且所有接受操作都存储在Request_Accepted表中,因此我们可以简单地获取每个表的计数并将它们分开以获得我们需要的速率。

requests_count = select count(*) from Friend_request;
accepts_count = select count(*) from Request_Accepted;
accept_rate = accepts_count / requests_count;

在大多数数据库中,count(*)选项不需要扫描表中的所有记录,它是一个O(1)选项。