반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

욱꾸미의 주꾸미 발

[코딩테스트] 프로그래머스 - 헤비 유저가 소유한 장소(MySQL, Level3) 본문

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

[코딩테스트] 프로그래머스 - 헤비 유저가 소유한 장소(MySQL, Level3)

욱꾸미 2022. 12. 10. 01:20
반응형

안녕하세요. 오늘 출근시간의 SQL문제는 '헤비 유저가 소유한 장소'라는 문제입니다.

문제 풀기에 앞서 문제 먼저 만나보시죠~

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

다음은 제가 작성한 SQL문구 입니다.

-- 코드를 입력하세요
SELECT pt.id, pt.name, pt.host_id
from places as pt
left join (select host_id, count(id)as ic from places group by host_id) as rt
on pt.host_id=rt.host_id
where rt.ic>1

오늘은 어제 풀었던 Level4짜리 문제에 비하면 그래도 코드가 간소한 편이네요.

 

그렇다면 이제 제가 푼 SQL문에 대해 설명을 드리겠습니다.

① id, name, host_id를 뽑아야 하는데 하나의 host 여러 name(혹은 id)를 갖는 데이터를 출력하면 되겠습니다.

② 때문에 먼저 host_id가 각각 몇개의 name(혹은 id)를 갖는지 찾을 필요가 있습니다.

③ host_id에 group by를 설정하고 해당 host_id가 갖는 name(혹은 id)의 값을 count하겠습니다.

host_id id 갯수 
A 2
B 1
C 3

이런 table의 결과가 나오겠죠~?

④ 그럼이제 ③결과에서 나온테이블을 기존테이블과 비교해 결과를 찾기위해 join해 주겠습니다.

     공통된 key값은 host_id를 사용합니다.

⑤ 예상되는 join 후의 table상태입니다.

id(기존테이블) name(기존테이블) host_id(join) id 갯수(⑤에서 생성)
a name_a A 2
b name_b B 1
a name_a A 2
c name_c C 3

그러면 여기서 우리는 문제에 나왔듯 "헤비 유저" 즉 id 갯수가 1보다 큰 데이터들만 걸러주면되겠습니다.

 

오늘의 쿼리 문제풀이는 여기서 마무리하겠습니다.

 

감사합니다:D

반응형