728x90
반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77487문제 요약
PLACES 테이블에서 공간을 둘 이상 등록한 "헤비 유저"의 공간 정보를 조회하고, 결과를 ID 순으로 정렬해야 합니다.
풀이 방법
- 헤비 유저 식별:
- HOST_ID를 기준으로 그룹화하여 각 유저가 등록한 공간의 개수를 계산합니다.
- COUNT(*) >= 2 조건을 만족하는 유저를 식별합니다.
- 헤비 유저의 공간 정보 조회:
- 서브쿼리 또는 CTE를 이용해 필터링된 유저의 HOST_ID를 기반으로 원래 테이블에서 데이터를 조회합니다.
- 결과 정렬:
- 결과를 ID 기준으로 정렬합니다.
정답 코드
SELECT p.ID, p.NAME, p.HOST_ID
FROM PLACES as p
WHERE p.HOST_ID IN (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*) >= 2
)
ORDER BY p.ID;
새롭게 배운 내용
CTE를 활용한 풀이
CTE(Common Table Expression)를 사용하면 가독성이 높아지고 쿼리의 단계별 논리를 명확하게 표현할 수 있습니다. 다음은 CTE를 활용한 풀이입니다:
WITH HeavyUsers AS (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*) >= 2
)
SELECT p.ID, p.NAME, p.HOST_ID
FROM PLACES p
WHERE p.HOST_ID IN (SELECT HOST_ID FROM HeavyUsers)
ORDER BY p.ID;
CTE와 MySQL의 WITH문 개념
- CTE란?
- CTE(Common Table Expression)는 쿼리에서 임시로 정의된 이름 있는 결과 집합입니다.
- CTE는 가독성을 높이고, 재귀적 쿼리나 복잡한 쿼리 구조를 단순화할 때 유용합니다.
- MySQL에서 CTE와 WITH문
- WITH 키워드를 사용하여 CTE를 정의합니다.
- CTE는 WITH로 시작하며, 이후 메인 쿼리에서 사용됩니다.
- MySQL 8.0 이상 버전에서 지원됩니다.
- 사용 방식
- WITH CTE_name AS (쿼리) 형태로 작성합니다.
- CTE는 일반 테이블처럼 메인 쿼리에서 참조할 수 있습니다.
728x90
반응형
'코딩테스트 > SQL' 카테고리의 다른 글
[MySQL] - 오랜 기간 보호한 동물(1) (0) | 2024.10.26 |
---|---|
[MySQL] 조건별로 분류하여 주문상태 출력하기 (0) | 2024.10.26 |
[MySQL] 카테고리 별 도서 판매량 집계하기 (1) | 2024.10.25 |
[MySQL] - 있었는데요 없었습니다 (0) | 2024.10.25 |
[MySQL] - 오랜 기간 보호한 동물(2) (2) | 2024.10.18 |