HoneyBee

Mysql 코딩테스트 연습 in 프로그래머스' 본문

SQL/Mysql

Mysql 코딩테스트 연습 in 프로그래머스'

아포갸토 2021. 5. 11. 17:38

문제 : 헤비 유저가 소유한 장소

 


문제 설명

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

NAMETYPE

ID INT
NAME VARCHAR
HOST_ID INT

문제

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

예시

예를 들어, PLACES 테이블이 다음과 같다면

IDNAMEHOST_ID

4431977 BOUTIQUE STAYS - Somerset Terrace, Pet Friendly 760849
5194998 BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly 760849
16045624 Urban Jungle in the Heart of Melbourne 30900122
17810814 Stylish Bayside Retreat with a Luscious Garden 760849
22740286 FREE PARKING - The Velvet Lux in Melbourne CBD 30900122
22868779 ★ Fresh Fitzroy Pad with City Views! ★ 21058208
  • 760849번 유저는 공간을 3개 등록했으므로 이 유저는 헤비유저입니다.
  • 30900122번 유저는 공간을 2개 등록했으므로 이 유저는 헤비유저입니다.
  • 21058208번 유저는 공간을 1개 등록했으므로 이 유저는 헤비유저가 아닙니다.

따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

IDNAMEHOST_ID

4431977 BOUTIQUE STAYS - Somerset Terrace, Pet Friendly 760849
5194998 BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly 760849
16045624 Urban Jungle in the Heart of Melbourne 30900122
17810814 Stylish Bayside Retreat with a Luscious Garden 760849
22740286 FREE PARKING - The Velvet Lux in Melbourne CBD 30900122

내가 작성한 쿼리문

select
	p.id,
	p.name,
	p.host_id
from
	places p
where
	p.host_id in (
	select
		t.host_id
	from
		(
		select
			host_id,
			count(host_id) as cnt
		from
			places
		group by
			host_id ) t
	where
		t.cnt >= 2 )

설명 : 

- places 테이블에서 id, name, host_id 를 조회해야하는데 조회하는 조건에서 host_id가 두개 이상인 id,name,host_id 데이터를 조회해야한다.

- 그래서 where 조건 안에서 p.host_id를 사용하여 in 구문안에 이중 서브쿼리(그냥 내가 지은 말인데 있으려나 모르겠네)를 활용해서 host_id가 2개 이상인 헤비유저의 host_id 를 찾아 조회하게 만든다.

 

느낀점 : 

- 솔직히 학교에서 배운 쿼리보다 요즘 회사에서 막 부딪혀 가면서 쿼리 짜고 있는데 그러다가 프로그래머스를 접해서 풀게되었다보니 그냥 설렁설렁하는 것보다 내 밥벌이랑 연관되서 공부해서 그런지 더욱 열심히하게 되고 재밌다. ㅋㅋㅋㅋ 끄읏

 

**문제 출처

문제 : 헤비유저가 소유한 장소

programmers.co.kr/learn/challenges

'SQL > Mysql' 카테고리의 다른 글

Mysql rollup 사용시 주의사항  (0) 2021.05.10