-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path597-FriendRequestsI-OverallAcceptanceRate.sql
More file actions
113 lines (112 loc) · 3.97 KB
/
597-FriendRequestsI-OverallAcceptanceRate.sql
File metadata and controls
113 lines (112 loc) · 3.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
-- 597. Friend Requests I: Overall Acceptance Rate
-- Table: FriendRequest
--
-- +----------------+---------+
-- | Column Name | Type |
-- +----------------+---------+
-- | sender_id | int |
-- | send_to_id | int |
-- | request_date | date |
-- +----------------+---------+
-- There is no primary key for this table, it may contain duplicates.
-- This table contains the ID of the user who sent the request, the ID of the user who received the request, and the date of the request.
--
--
-- Table: RequestAccepted
--
-- +----------------+---------+
-- | Column Name | Type |
-- +----------------+---------+
-- | requester_id | int |
-- | accepter_id | int |
-- | accept_date | date |
-- +----------------+---------+
-- There is no primary key for this table, it may contain duplicates.
-- This table contains the ID of the user who sent the request, the ID of the user who received the request, and the date when the request was accepted.
--
--
-- Write an SQL query to find the overall acceptance rate of requests, which is the number of acceptance divided by the number of requests.
-- Return the answer rounded to 2 decimals places.
--
-- Note that:
--
-- The accepted requests are not necessarily from the table friend_request.
-- In this case, Count the total accepted requests (no matter whether they are in the original requests),
-- and divide it by the number of requests to get the acceptance rate.
-- It is possible that a sender sends multiple requests to the same receiver,
-- and a request could be accepted more than once. In this case, the ‘duplicated’ requests or acceptances are only counted once.
-- If there are no requests at all, you should return 0.00 as the accept_rate.
-- The query result format is in the following example.
--
-- Example 1:
--
-- Input:
-- FriendRequest table:
-- +-----------+------------+--------------+
-- | sender_id | send_to_id | request_date |
-- +-----------+------------+--------------+
-- | 1 | 2 | 2016/06/01 |
-- | 1 | 3 | 2016/06/01 |
-- | 1 | 4 | 2016/06/01 |
-- | 2 | 3 | 2016/06/02 |
-- | 3 | 4 | 2016/06/09 |
-- +-----------+------------+--------------+
-- RequestAccepted table:
-- +--------------+-------------+-------------+
-- | requester_id | accepter_id | accept_date |
-- +--------------+-------------+-------------+
-- | 1 | 2 | 2016/06/03 |
-- | 1 | 3 | 2016/06/08 |
-- | 2 | 3 | 2016/06/08 |
-- | 3 | 4 | 2016/06/09 |
-- | 3 | 4 | 2016/06/10 |
-- +--------------+-------------+-------------+
-- Output:
-- +-------------+
-- | accept_rate |
-- +-------------+
-- | 0.8 |
-- +-------------+
-- Explanation:
-- There are 4 unique accepted requests, and there are 5 requests in total. So the rate is 0.80.
--
--
-- Follow up:
--
-- Could you write a query to return the acceptance rate for every month?
-- Could you write a query to return the cumulative acceptance rate for every day?
-- Write your MySQL query statement below
SELECT
ROUND(
IFNULL((-- 通过数量
SELECT
COUNT(*)
FROM
( -- 去重后的通过数据
SELECT
requester_id,
accepter_id
FROM
RequestAccepted
GROUP BY
requester_id,
accepter_id
) AS ra
)
/
( -- 申请总数
SELECT
COUNT(*)
FROM
(
SELECT
sender_id,
send_to_id
FROM
FriendRequest
GROUP BY
sender_id,
send_to_id
) AS fq
),0)
,2) AS accept_rate