2017-08-16 4 views
0

2つのテーブル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 

それは正しいだろうか?

+0

なぜあなたはそれを試してみませんか? jsfiddleのような便利なツールがありますが、SQLクエリの場合はhttp://sqlfiddle.com/ – zoubida13

+0

と呼ばれています。Friend_RequestテーブルとRequest_Acceptedテーブルを結合しますが、where句にはAcceptableテーブルがあります。 – jarlh

+0

@ zoubida13:データがありません。これは理論的な質問です。 – Damien

答えて

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 

あなたが行がNULLアクセプタ意志たいので、ちょうどあなたのRequest_AcceptedテーブルからWHEREを削除します。それ以外の場合は、同じ番号を同じ番号で割ったものになります。

編集:1つの承諾で複数のリクエストを送信するかどうかを検討する必要がありますが、それは別のワームの可能性があります。

-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)のオプションです。

関連する問題