[SQL 심화] 리트코드 3문제::570. Managers with at Least 5 Direct Reports,1934. Confirmation Rate,1193. Monthly Transactions I

Hyeon·2024년 10월 17일

SQL 문제 풀이

목록 보기
29/61

570. Managers with at Least 5 Direct Reports

😀이 문제는 꽤 쉽다. 직속 보고자가 5명 이상인 관리자를 찾는 솔루션을 구하는 문제이다.

📍어떻게 풀었냐면?
관리자 아이디를 counting 하였을 때 5이상 나오는 아이디의 이름을 구하면 된다.
1.관리자 아이디 기준으로 counting 하였을 때 5이상 나오는 managerId 컬럼구하기
2.서브쿼리를 활용해서 해당 managerId와 id 컬럼 같은 경우 name 을 출력하도록 하기

문제


풀이

select name from Employee t2 where t2.id in (select managerID from Employee group by managerId having count(*)>=5) ;

1934. Confirmation Rate

😢이 문제..생각보다 되게 어려웠다..solution보고 힌트 얻어서 정답 구했었던 기억이 난다..

해당 문제는 각 사용자의 확인율을 구하는 솔루션을 작성하는 문제이다.
사용자별 확인된 비율을 구해서 각각 구하고, 소수점 둘째자리까지 출력하면 된다.

📍어떻게 풀었냐면?
with절을 많이 써서 구한문제로, 사용자별 전체 취한 액션 건수 와 확인된 건수를 따로 구한다음에 join 해서 확인됨이 출력될 비율을 계산하였다.
1.action이 confirmed 인 경우 사용자별 counting
2.모든 action 기준 사용자별 counting
3.1과 2을 join하기 , null값은 0으로 처리 & 소수점 둘째자리 출력
4.signup 테이블과 join해서 가입한 사용자 아이디만에 한해 출력하도록 하기

문제

풀이

with cte_1 as (select user_id,count() as count from Confirmations where action in ('Confirmed') group by user_id),
cte_2 as (select user_id,count(
) as total_count from Confirmations group by user_id),
cte_3 as (select ifnull(a.count,0) as count , b.user_id, total_count from cte_1 a right join cte_2 b on a.user_id =b.user_id ),
cte_4 as (select user_id ,round((count/total_count),2) as confirmation_rate from cte_3)

select a.user_id , ifnull(confirmation_rate, 0) as confirmation_rate from Signups a left join cte_4 b on a.user_id = b.user_id ;

1193. Monthly Transactions I

😀월 별과 국가별로 거래건수와 총 금액, 승인된 거래 건수와 총 금액을 찾는 sql 쿼리이다.

📍문제 어떻게 풀었냐면?
승인된 건수와 전체 건수를 나누어서 각각 출력하는 경우가 필요했다.
case when 구문을 활용했으며, 거래 건수는 count을 / 총 금액은 sum을 이용하였다.

문제


풀이

SELECT
DATE_FORMAT(trans_date, '%Y-%m') AS month,
country,
COUNT(id) AS trans_count,
SUM(CASE WHEN state = 'approved' THEN 1 ELSE 0 END) AS approved_count,
SUM(amount) AS trans_total_amount,
SUM(CASE WHEN state = 'approved' THEN amount ELSE 0 END) AS approved_total_amount
FROM
Transactions
GROUP BY
month, country;

2024.10.15 수요일에 풀었던 문제..! 2일 밀려 포스팅한다!

0개의 댓글