데이터 리터러시를 위한 발자취

[프로그래머스] 코딩테스트 연습 - 헤비 유저가 소유한 장소 본문

데이터 분석/SQL

[프로그래머스] 코딩테스트 연습 - 헤비 유저가 소유한 장소

wosole 2023. 9. 21. 16:25

헤비 유저가 소유한 장소 (2021 Dev-Matching: 웹 백엔드 개발자(상반기) )

문제 설명

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

 

문제

이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.

 

예시

출력 전/후 결과 예시


문제풀이

접근방식은 아래와 같이 정리하여 진행하였습니다. 

 

1. 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 정의함 

- 결과예시를 살펴보면, 둘 이상인 헤비유저들의 리스트를 출력해야 함. 서브쿼리를 이용하여 코드 작성 필요

- WHERE 절 서브쿼리 사용하였으며, GROUP BY를 통해 HOST_ID를 그룹화해 준 후, COUNT(*)가 2 이상인 값을 출력함

▷ HAVING 절 기반 COUNT(*) >= 2 이상 값을 카운트하도록 작성

 

2. 아이디 순으로 조회하는 SQL문을 작성

▷ ORDER BY ID로 정렬 필요

 

제출 코드

- 문제풀이 기반 제출한 정답 코드

# 정답코드
SELECT *
FROM PLACES 
WHERE HOST_ID IN (SELECT HOST_ID FROM PLACES 
                    GROUP BY HOST_ID
                    HAVING COUNT(*) >= 2) # 헤비유저 조건에 맞는 서브쿼리문 작성
ORDER BY ID

 

주의할 점

- 서브쿼리를 사용하지 않고, 아래 코드처럼 GROUP BY, HAVING절로만 헤비유저를 구하려고 한다면 오답 발생

# 오답코드
SELECT *
FROM PLACES 
GROUP BY HOST_ID
HAVING COUNT(*) >= 2
ORDER BY ID

▶오답 이유

- 문제가 요구하는 바는 HOST_ID가 2건 이상인 헤비유저들의 전체 리스트가 출력되어야 함

- 오답코드처럼 작성 시 HOST_ID가 그룹화되어 출력되는 row 수가 감소함 


프로그래머스에서 제공 중인 SQL 코딩테스트 중 Lv.3에 해당하는 문제입니다.

서브쿼리 사용하는 것 말고는 생각보단 쉬워서 오..? 하면서 풀어서 1회 차에 정답 처리 되었는데요. 

 

주의할 점은 결과 예시를 제대로 이해하지 않고 푼다면 오답이 나올 가능성이 높은 문제인 것 같아서 추가로 정리해 보았습니다.

 

코딩테스트 진행하면서 헷갈릴 수 있는 문제들은 이렇게 틈틈이 정리해야겠습니다-! 

 

 

프로그래머스

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

programmers.co.kr

 

Comments