[MySQL] 597. Friend Requests I: Overall Acceptance Rate

2022. 11. 26. 20:01TIL💡/Database

이게 Easy라니..나 생각보다 SQL을 훨씬 못하는 상태였다니...

프리미엄 가입한 김에 열심히 풀어야겠다.

 

https://leetcode.com/problems/friend-requests-i-overall-acceptance-rate/

 

Friend Requests I: Overall Acceptance Rate - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

이 문제는 두 테이블을 사용하되, 조인할 필요는 없다.

우선 내가 맞닥뜨린 문제는 크게 두 가지이다.

 

1. 특별한(distinct한) row의 수와 전체 row 수를 어떻게 같이 SELECT에 올릴까

2. Request 수가 0인 경우는 division by 0이라서 null 값 발생

 

1번의 경우에는 단순히 괄호를 쳐서 분수의 분자와 분모를 채우면 된다.

2번의 경우에는 COUNT는 NULL을 포함하지 않기 때문에 이에 대해 IFNULL로 처리를 하면 된다.

 

그리고 여기서는 소수점 2자리를 요구하기 때문에 ROUND 함수를 사용하면 된다.

SELECT
ROUND(
    IFNULL(
    (SELECT COUNT(*) FROM (SELECT DISTINCT requester_id, accepter_id FROM RequestAccepted) AS A)
    /
    (SELECT COUNT(*) FROM (SELECT DISTINCT sender_id, send_to_id FROM FriendRequest) AS B),
    0)
, 2) AS accept_rate;