-
[코딩테스트] 프로그래머스 - 헤비 유저가 소유한 장소(MySQL, Level3)코딩테스트/프로그래머스 2022. 12. 10. 01:20728x90
안녕하세요. 오늘 출근시간의 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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기(MySQL, Level4) (0) 2022.12.14 [코딩테스트] 프로그래머스 - 불량 사용자(Java, Level3) (1) 2022.12.12 [코딩테스트] 프로그래머스 - 삼각 달팽이(Java, Level2) (0) 2022.12.10 [코딩테스트] 프로그래머스 - 우유와 요거트가 담긴 장바구니(MySQL, Level4) (0) 2022.12.09 [코딩테스트] 프로그래머스 - 큰 수 만들기(Java, Level2, 실패코드) (0) 2022.12.09