[코딩테스트]/[SQL]

[StrataScratch - SQL] (Medium) Acceptance Rate By Date

잰잰' 2025. 5. 13. 19:27

문제

친구 요청이 전송된 각 날짜에 대한 친구 수락률을 계산하세요. 요청은 action = sent일 때 전송된 것으로 간주되며, action = accepted일 때 수락된 것으로 간주됩니다. 요청이 수락되지 않은 경우, 해당 요청의 수락 기록은 테이블에 존재하지 않습니다. 출력은 요청이 전송된 날짜 중에서 적어도 하나 이상의 요청이 수락된 날짜만 포함해야 하며, 수락률은 해당 날짜에 대해서만 계산될 수 있습니다. 결과는 가장 이른 날짜부터 가장 늦은 날짜 순으로 정렬되어야 합니다.

 

테이블설명

 

예상결과

 

✏️ 풀이

WITH sender AS (
    SELECT *
    FROM fb_friend_requests
    WHERE action = 'sent'
), receiver AS (
    SELECT *
    FROM fb_friend_requests
    WHERE action = 'accepted'
)

SELECT s.date, COUNT(r.user_id_receiver) / COUNT(s.user_id_sender)
FROM sender AS s
LEFT JOIN receiver AS r ON s.user_id_sender = r.user_id_sender AND s.user_id_receiver = r.user_id_receiver
GROUP BY 1
ORDER BY 1 ASC;

1. 요청 보낸 유저 데이터만 필터

2. 수락한 유저 데이터만 필터

3. 수락하지 않은 경우 테이블에 남지 않기 때문에 요청 보낸 유저 테이블 기준으로 조인

4. on 조건은 요청 유저와 수락 유저가 같음

5. 수락 유저 / 요청 유저