반응형
https://programmers.co.kr/learn/courses/30/lessons/77487
2021 Dev-Matching: 웹 백엔드 개발자(상반기) 기출문제이다.
지난 번에 참여했을 때 풀었었는데 다시한번 풀어보았다.
JPA를 사용하면서 sql을 직접 다루지 않다보니 많이 까먹긴 하였다.
내가 푼 풀이 (Group by + Subquery)
select A.id, A.name, A.host_id
from places A, (
select host_id
from places
group by host_id
having count(host_id) >= 2
) B
where A.host_id = B.host_id
order by A.id
- from절에 서브쿼리를 담는 것 부터 성능상 이슈가 있어 보인다.
- 방법이 생각나지 않는다.
다른사람의 풀이 (Group by + IN)
SELECT *
FROM PLACES PL1
WHERE PL1.HOST_ID IN (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*) > 1
)
ORDER BY ID;
- where 절로 빼면서 in절을 사용하였다
다른사람의 풀이 2 (EXIST)
SELECT *
FROM PLACES PL1
WHERE EXISTS (
SELECT 1
FROM PLACES PL2
WHERE PL1.HOST_ID = PL2.HOST_ID
GROUP BY HOST_ID
HAVING COUNT(*) > 1
)
ORDER BY ID;
- In 절과 달리 존재하는지 안하는지만 체크하기 때문에 성능 개선이 있어보인다.
'코딩테스트 > SQL' 카테고리의 다른 글
[프로그래머스] [oracle] [sql] 입양시각 구하기 (0) | 2020.11.08 |
---|