알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

테이블 이름 : PLACES

ID(PK),NAME,HOST_ID 

아이디,이름,공간 소유한 아이디

 

공간 두개 소유한 사람 "헤비 유저"

ID가 같고, HOST_ID가 두개면 그 사람 나오게..

 

마지막 ORDER BY ID ASC 필요  


Solution✍
SELECT ID,NAME,HOST_ID
FROM PLACES
WHERE HOST_ID IN (SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(ID) >= 2)
ORDER BY ID ASC;
------- X ------
SELECT ID,NAME,HOST_ID
FROM PLACES
WHERE HOST_ID = (SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(ID) >= 2)
ORDER BY ID ASC;

=을 사용하면 하나의 데이터만 가져오기 때문에 IN을 써야함 =을 쓰려면 DISTINCT로 한 개 데이터 가져올때..

 

처음에 COUNT(HOST_ID)로 조건을 줬는데 HOST_ID로 그룹을 했기 때문에 말이 안됨..


Review🤩

MY SQL은 SELECT FROM 절에 AS가 가능하다!

 

2022.07.08 추가

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

EXISTS를 이용해서 IN 대신 사용해봤는데 결과 값이 달랐다.

EXISTS : 조건에 해당하는 ROW의 존재 유무와 체크 후 더이상 수행하지 않음. 

IN : 조건에 해당하는 ROW의 컬럼을 비교하여 체크한다.

 

IN을 이용해서 가공된 값을 볼 수 있지만 EXISTS는 IF문과 같이 있으면 수행시키고 , 가공되지는 않고 없으면 쿼리가 실행이 되지 않는다.

SELECT ID,NAME,HOST_ID
FROM PLACES a
WHERE EXISTS ( SELECT 1 -- 이 서브쿼리에서 다른 컬럼들은 불필요
	             FROM PLACES b
                where a.host_id = b.host_id
             GROUP BY HOST_ID 
            HAVING COUNT(host_ID) >= 2
)
ORDER BY ID;

 

+ Recent posts