반응형
아래는 문제 링크입니다.
https://programmers.co.kr/learn/courses/30/lessons/77487
아래는 해결 SQL문이다.
SELECT p1.ID, NAME, p1.HOST_ID from PLACES as p1
join (SELECT HOST_ID from PLACES group by HOST_ID HAVING COUNT(HOST_ID) > 1) p2
on p2.HOST_ID = p1.HOST_ID
ORDER BY p1.ID
공간을 많이 소유한 사람만을 선별해 그들의 정보를 호출하는 것이다. 공간을 많이 소유한 사람은 헤비 유저라고 한다.
먼저 접근하는 아이디어가 중요했다.
- 헤비유저를 판단하는 방법은 유저의 ID가 2번 이상 등장하는지, 아닌지다. 2번 이상 나오면 공간을 2개 가지므로 헤비 유저!
- 즉 GROUP By를 진행하고, COUNT 집계 함수를 사용해야 한다고 생각했다.
- 그러나 막상 써보면 하나의 행으로 나온다. 이를 해결하기 위해 SELF JOIN 방법을 생각했다.
- 즉 SELF JOIN할 PLACES 테이블에서 헤비 유저를 찾아서 순수 PACES 테이블과 JOIN하면 된다.
GROUP BY HOST_ID HAVING COUNT(HOST_ID) > 1
위 조건을 만족하면 헤비 유저이므로 이 조건을 통해 헤비 유저를 찾고, 이에 대한 HOST_ID를 리턴한다. - 그러면 이제 헤비 유저의 아이디만 나왔으므로 WHERE p2.HOST_ID = p1.HOST_ID의 조건을 걸고
- ORDER BY p1.ID를 진행하면 우리가 원하는 값을 출력할 수 있다.
이 문제는 프로그래머스 2021 Dev-Matching 코테에서 등장한 문제였다.
그동안 대외활동도 하고 책도 읽으면서 SQL에 대한 공부를 진행했는데, 수월하게 풀 수 있어서 문제를 풀고 꽤 짜릿한 기분을 느꼈다.
더 열심히하자!!!
이상으로 포스팅을 마칩니다.
반응형
댓글