헤비 유저가 소유한 장소

유승선 ·2022년 9월 1일
0

SQL, JPQL

목록 보기
2/9

실제 기업 코테에서 나왔던 SQL 문제다. 앞서 SQL 고득점 KIT 을 다 풀고 도전해봤는데 처음에 어떻게 할지 좀 감이 안왔다. 그래서 많이 고민 했는데 결국 SUB-QUERY 를 써야 한다고 생각했고 고민 끝에 JOIN 을 사용하기로 마음 먹었다.

문제가 요구하는건 헤비유저, 즉 공간을 둘 이상 등록한 사람이 등록한 모든 공간의 정보를 아이디 순으로 조회 해야했고 COUNT 같은 문법으로 각 HOST_ID 가 몇가지의 공간을 소유 하는지 알았어야했다.

SELECT P1.ID, P1.NAME, P1.HOST_ID 
FROM PLACES as P1 
LEFT JOIN (SELECT HOST_ID,COUNT(HOST_ID) as cnt 
FROM PLACES
GROUP BY HOST_ID) as P2 ON P1.HOST_ID = P2.HOST_ID 
WHERE P2.cnt >= 2 
ORDER BY ID ASC 

결국 SUB-QUERY 한 컬럼들을 조인 시켰고 WHERE 을 적절히 사용해서 답을 골라냈지만 좀 더 좋은 답들이 있었다.

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

이번 SUB-QUERY 에서 다른점은 IN 문법을 사용해준것이다. 고득점 KIT 에서 IN 을 연습했던만큼 비슷하게 사용했는데 주의 할점은 SUB-QUERY 에서 컬럼이 한개 이상이면 IN 문법을 사용할 수 없으니 조심해야한다.

배운점:
1. LEFT JOIN 할때 SUB-QUERY 사용법
2. IN 을 할때는 컬럼이 무조건 한개여야 한다는점

profile
성장하는 사람

0개의 댓글