코딩테스트/프로그래머스

SQL 문제 - 헤비 유저가 소유한 장소(Self-Join)

Debin 2022. 4. 30.
반응형

아래는 문제 링크입니다.

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

 

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

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

programmers.co.kr

아래는 해결 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

 

공간을 많이 소유한 사람만을 선별해 그들의 정보를 호출하는 것이다. 공간을 많이 소유한 사람은 헤비 유저라고 한다.

먼저 접근하는 아이디어가 중요했다.

  1. 헤비유저를 판단하는 방법은 유저의 ID가 2번 이상 등장하는지, 아닌지다. 2번 이상 나오면 공간을 2개 가지므로 헤비 유저!
  2. 즉 GROUP By를 진행하고, COUNT 집계 함수를 사용해야 한다고 생각했다.
  3. 그러나 막상 써보면 하나의 행으로 나온다. 이를 해결하기 위해 SELF JOIN 방법을 생각했다.
  4. 즉 SELF JOIN할  PLACES 테이블에서 헤비 유저를 찾아서 순수 PACES 테이블과 JOIN하면 된다. 
    GROUP BY HOST_ID HAVING COUNT(HOST_ID) > 1  
    위 조건을 만족하면 헤비 유저이므로 이 조건을 통해 헤비 유저를 찾고, 이에 대한 HOST_ID를 리턴한다.
  5. 그러면 이제 헤비 유저의 아이디만 나왔으므로 WHERE p2.HOST_ID = p1.HOST_ID의 조건을 걸고
  6. ORDER BY p1.ID를 진행하면 우리가 원하는 값을 출력할 수 있다.

이 문제는 프로그래머스 2021 Dev-Matching 코테에서 등장한 문제였다.

그동안 대외활동도 하고 책도 읽으면서 SQL에 대한 공부를 진행했는데, 수월하게 풀 수 있어서 문제를 풀고 꽤 짜릿한 기분을 느꼈다.

더 열심히하자!!!

 

이상으로 포스팅을 마칩니다.

반응형

댓글