| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 1931번
- springboot
- 씨샵
- MySQL
- 닫기버튼
- 자바
- 운전면허
- Python
- WPF
- SQL
- MVVM
- level2
- 프로그래머스
- 코딩테스트
- level4
- 일반화
- WSL
- delegate
- 쿼리
- 스프링부트
- 백준
- level3
- Spring Boot
- c#
- 3일컷
- 보통2종
- 코테
- JPA
- programmers
- Java
- Today
- Total
욱꾸미의 주꾸미 발
[코딩테스트] 프로그래머스 - 헤비 유저가 소유한 장소(MySQL, Level3) 본문
안녕하세요. 오늘 출근시간의 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 |