코딩테스트_프로그래머스
주제 : 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기
범위: 2021 Dev-Matching: 웹 백엔드 개발자 상반기
레벨: Lv.3

https://school.programmers.co.kr/learn/courses/30/lessons/77487
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 나타냅니다. ID는 기본키입니다.

문제
이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.
예시
예를 들어, PLACES 테이블이 다음과 같다면

- 760849번 유저는 공간을 3개 등록했으므로 이 유저는 헤비유저입니다.
- 30900122번 유저는 공간을 2개 등록했으므로 이 유저는 헤비유저입니다.
- 21058208번 유저는 공간을 1개 등록했으므로 이 유저는 헤비유저가 아닙니다.
따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

#답
SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID)>=2)
ORDER BY ID
#오답노트
SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (SELECT COUNT(HOST_ID) >=2 FROM PLACES)
ORDER BY ID
SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE ID IN (SELECT ID FROM PLACES WHERE COUNT(HOST_ID) >=2)
ORDER BY ID
어제 배운 지식을 이용해서 해보려 했는데... 첫번째꺼는 출력값이 없었고, 두번째꺼는 심지어 오류 뜸 ....
역시 여러 답안이 존재했으나, 나는 내 식과 비슷한 답안을 가지고 와서 오답노트 작성할란다
왜 틀렸지?
WHERE HOST_ID IN (SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID)>=2)
내 첫번째 오답과 비슷하지만, 중요한 점은 GROUP BY를 해주고, HAVING을 사용하여 조건을 걸었다는 점
내가 봤을 땐,, 내가 아직 Group by에 대해 완전하게 이해하지 못한듯 하다
나를 위해 설명 겸 적어놓겟다
1. 데이터 이해
주어진 테이블 예시:
| ID | NAME | HOST_ID |
| 4431977 | BOUTIQUE STAYS - Somerset Terrace, Pet Friendly | 760849 |
| 5194998 | BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly | 760849 |
| 22868779 | ★ Fresh Fitzroy Pad with City Views! ★ | 21058208 |
- HOST_ID 760849 → 2개의 공간 등록 → 헤비 유저
- HOST_ID 21058208 → 1개의 공간 등록 → 헤비 유저 아님
2. 그냥 COUNT만 하면?
SELECT COUNT(HOST_ID) FROM PLACES;
- 결과: 3
- 의미: 테이블 전체에 공간이 3개 있음
- 문제: 누가 2개 이상 공간을 가지고 있는지 알 수 없음
즉, 개별 HOST_ID별로 나눠서 세어야 함 → 여기서 GROUP BY 필요
3. GROUP BY 사용
SELECT HOST_ID, COUNT(*) AS num_spaces
FROM PLACES
GROUP BY HOST_ID;
동작원리
- HOST_ID를 기준으로 같은 HOST_ID끼리 묶음
- 각 그룹마다 COUNT 계산
결과:
| HOST_ID | num_spaces |
| 760849 | 2 |
| 21058208 | 1 |
막상 .. 이리 보면 이해 백프로 된거 같은데 .. 왜 자꾸 이해가 안된거같지 큼
'공부 & 프로젝트 > SQL' 카테고리의 다른 글
| [SQL TEST 39일차] Group by, LV.3 : 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (1) | 2025.11.12 |
|---|---|
| [SQL TEST 38일차] Group by, LV.3 : 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 (0) | 2025.11.11 |
| [SQL TEST 36일차] String, Date, LV.3 : 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2025.11.05 |
| [SQL TEST 35일차] Group by, LV.3 : 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2025.11.04 |
| [SQL TEST 34일차] Join, LV.3 : 없어진 기록 찾기 (0) | 2025.11.04 |