SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_헤비 유저가 소유한 장소

몽총한몽이네 2024. 2. 23. 04:03
반응형

SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID in (SELECT HOST_ID 
            FROM PLACES
            GROUP BY 1
            HAVING COUNT(HOST_ID)>=2)
ORDER BY 1

문제
이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성

 

 조건 자체가 적어서 어렵지는 않다. 하지만 Where in 에 대한 개념이 조금 부족하면 어려울 수 있다. 

일단 공간을 둘 이상 등록 한 사람이다. HOST_ID가 >=2 가 되어야 하는 조건을 가져야 한다 (공간 마다 아이디가 마킹되어 있으므로 아이디의 개수가 곧 공간의 개수). 이 조건을 메인쿼리에서 바로 적용하기는 어려우므로 서브쿼리를 작성해 사용해 준다. 서브쿼리에서 HOST_ID 기준으로 GROUP 처리를 해준다. 그후 HAVING 조건으로 필터링 하면 공간이 2개이상인 아이디 값이 서브쿼리 컬럼에 남는다. 그 후 메인쿼리와 연결할때 in 을 써준다. 이퀄(=) 을 써주게 되면 단 하나의 값만 비교 하게되므로 오류가뜬다. 아마 무지성으로 이퀄 조건문을 쓰고 왜 안되냐고 골머리를 앓는 초보들도 많을 것이다...(저도.. 마찬가지..였습니다) in 조건문은 or와 사실상 동일하여 해당 아이디 값들이 포함된 녀석들을 필터링 할수 있게 해준다. 그 후 ORDER BY로 정렬해서 값을 추출 해주면 끝이난다.. 간단하다..

반응형