[프로그래머스] 헤비 유저가 소유한 장소 - MySQL

Kim Ji Eun·2022년 4월 1일
0

코딩테스트 SQL 준비

목록 보기
13/14

난이도

레벨 3

문제

https://programmers.co.kr/learn/courses/30/lessons/77487

풀이

먼저 헤비유저를 조회하는 쿼리를 짰다.

# cnt>=2인 host id 테이블 
SELECT HOST_ID 
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*)>=2
ORDER BY ID;

위 쿼리를 서브쿼리로 이용하면 되겠다 싶어서 서브쿼리를 활용하는 방안에 대해 생각했다.
1. 위 쿼리로 테이블을 따로 생성하고 조인해서 사용하는 방법
2. WHERE 절에 조건으로 서브쿼리를 다는 법

두 가지 방법으로 모두 풀어봤다.

WHERE 절에 조건으로 서브쿼리를 달 때 주의해야할 문법이 있다.
서브쿼리가 단일 행일 경우, WHERE ID = (SELECT ~)
서브쿼리가 다중 행일 경우, WHERE ID IN (SELECT ~)
이렇게 사용해야 한다.

다중행일 경우 IN 뿐만 아니라 ANY, ALL, EXISTS 연산자 사용가능하다.

코드

1) 서브쿼리 조인


SELECT P.ID, P.NAME, P.HOST_ID
FROM PLACES P
JOIN 
(SELECT HOST_ID, COUNT(*) AS CNT
FROM PLACES
GROUP BY HOST_ID
HAVING CNT>=2) P2
ON P.HOST_ID = P2.HOST_ID
ORDER BY P.ID;

2) 서브쿼리 WHERE절

SELECT ID, NAME, HOST_ID
FROM PLACES 
WHERE HOST_ID IN (SELECT HOST_ID 
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*)>=2)
ORDER BY ID;

https://java119.tistory.com/49

profile
Back-End Developer

0개의 댓글