본문 바로가기
코딩테스트/SQL

[프로그래머스] [Sql] [Oracle] 헤비 유저가 소유한 장소 (level3)

by 커피는아아 2021. 6. 14.
반응형

https://programmers.co.kr/learn/courses/30/lessons/77487

 

코딩테스트 연습 - 헤비 유저가 소유한 장소

PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를

programmers.co.kr

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