알고리즘 풀이 방법입니다.
문제(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;
'Algorithm' 카테고리의 다른 글
[프로그래머스] 있었는데요 없었습니다 (0) | 2022.07.08 |
---|---|
[프로그래머스] 없어진 기록 찾기 (0) | 2022.07.08 |
[프로그래머스] 오랜 기간 보호한 동물 (1) , (2) (0) | 2022.07.07 |
[프로그래머스] GROUP BY 3문제 (0) | 2022.06.30 |
[프로그래머스] Summer/Winter Coding(~2018)예산 (0) | 2022.05.06 |