Skip to content

Commit

Permalink
Add Confirmation Rate Leetcode SQL problem
Browse files Browse the repository at this point in the history
  • Loading branch information
absognety committed Apr 28, 2024
1 parent b165048 commit 302c17f
Showing 1 changed file with 115 additions and 0 deletions.
115 changes: 115 additions & 0 deletions LeetCode/SQL50/ConfirmationRate.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
-- Table: Signups

-- +----------------+----------+
-- | Column Name | Type |
-- +----------------+----------+
-- | user_id | int |
-- | time_stamp | datetime |
-- +----------------+----------+
-- user_id is the column of unique values for this table.
-- Each row contains information about the signup time for the user with ID user_id.


-- Table: Confirmations

-- +----------------+----------+
-- | Column Name | Type |
-- +----------------+----------+
-- | user_id | int |
-- | time_stamp | datetime |
-- | action | ENUM |
-- +----------------+----------+
-- (user_id, time_stamp) is the primary key (combination of columns with unique values) for this table.
-- user_id is a foreign key (reference column) to the Signups table.
-- action is an ENUM (category) of the type ('confirmed', 'timeout')
-- Each row of this table indicates that the user with ID user_id requested a confirmation message at time_stamp and that confirmation message was either confirmed ('confirmed') or expired without confirming ('timeout').


-- The confirmation rate of a user is the number of 'confirmed' messages divided by the total number of requested confirmation messages. The confirmation rate of a user that did not request any confirmation messages is 0. Round the confirmation rate to two decimal places.

-- Write a solution to find the confirmation rate of each user.

-- Return the result table in any order.

-- The result format is in the following example.



-- Example 1:

-- Input:
-- Signups table:
-- +---------+---------------------+
-- | user_id | time_stamp |
-- +---------+---------------------+
-- | 3 | 2020-03-21 10:16:13 |
-- | 7 | 2020-01-04 13:57:59 |
-- | 2 | 2020-07-29 23:09:44 |
-- | 6 | 2020-12-09 10:39:37 |
-- +---------+---------------------+
-- Confirmations table:
-- +---------+---------------------+-----------+
-- | user_id | time_stamp | action |
-- +---------+---------------------+-----------+
-- | 3 | 2021-01-06 03:30:46 | timeout |
-- | 3 | 2021-07-14 14:00:00 | timeout |
-- | 7 | 2021-06-12 11:57:29 | confirmed |
-- | 7 | 2021-06-13 12:58:28 | confirmed |
-- | 7 | 2021-06-14 13:59:27 | confirmed |
-- | 2 | 2021-01-22 00:00:00 | confirmed |
-- | 2 | 2021-02-28 23:59:59 | timeout |
-- +---------+---------------------+-----------+
-- Output:
-- +---------+-------------------+
-- | user_id | confirmation_rate |
-- +---------+-------------------+
-- | 6 | 0.00 |
-- | 3 | 0.00 |
-- | 7 | 1.00 |
-- | 2 | 0.50 |
-- +---------+-------------------+
-- Explanation:
-- User 6 did not request any confirmation messages. The confirmation rate is 0.
-- User 3 made 2 requests and both timed out. The confirmation rate is 0.
-- User 7 made 3 requests and all were confirmed. The confirmation rate is 1.
-- User 2 made 2 requests where one was confirmed and the other timed out. The confirmation rate is 1 / 2 = 0.5.

-- Solution:
-- Write your PostgreSQL query statement below

select user_id, max(confirmation_rate) as confirmation_rate from
(
select tb1.user_id, round(tb1.cnt1/tb2.cnt2::numeric,2) as confirmation_rate
from
(
select user_id,
case
when action='confirmed'
then count(user_id)
when action is null
then 0
else 0 end as cnt1 from
(
select Signups.user_id,
Confirmations.time_stamp,
Confirmations.action
from Signups
left join Confirmations
on (Signups.user_id = Confirmations.user_id)
)
group by user_id,action
) tb1 left join (
select user_id, count(user_id) as cnt2 from
(
select Signups.user_id,
Confirmations.time_stamp,
Confirmations.action
from Signups
left join Confirmations
on (Signups.user_id = Confirmations.user_id)
)
group by user_id
) tb2 on (
tb1.user_id = tb2.user_id
)
) group by user_id;

1 comment on commit 302c17f

@absognety
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My Original devisement!!

Please sign in to comment.