-
[SQL/프로그래머스] 헤비 유저가 소유한 장소 , 다중행 서브쿼리, 인라인뷰, 분석함수코딩테스트/프로그래머스 2023. 3. 16. 09:30
https://school.programmers.co.kr/learn/courses/30/lessons/77487
이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.
위의 문제는 host_id가 2개 이상인, 즉 중복된 데이터를 찾는 문제이다.
📑 다중행 서브쿼리 , IN 사용하기
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
위의 서브쿼리 내용을 실행해보면 다음과 같은 결과가 나온다. 다중행 서브쿼리로 IN 연산자를 사용했으므로, 서브 쿼리에서 조회된 데이터가 메인쿼리의 host_id에 있는 경우 그 데이터를 출력한다.
📑 인라인뷰 사용하기 , 분석함수
-- 인라인 뷰 사용 select id, name, host_id from ( select id, name, host_id, count(host_id) over (partition by host_id order by host_id) cnt from places ) where cnt >= 2 order by id
인라인뷰 안 서브쿼리 내용은 다음과 같다. 오라클에서 분석함수를 사용할 때 partition by를 사용하여 그룹을 묶어서 연산할 수 있다. 즉) group by 절을 사용하지 않고, 조회된 각 행에 그룹으로 집계된 값을 표시할 때 over 절과 함께 partition by 절을 사용하면 된다.
정답은 아래와 같다.
반응형'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[SQL/프로그래머스] 입양 시각 구하기(2) , CONNECT BY (0) 2023.03.22 [SQL/프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) 2023.03.17 [SQL/프로그래머스] 오랜 기간 보호한 동물(1) rownum, rank() (0) 2023.03.15 [SQL/프로그래머스] 없어진 기록 찾기 (NOT IN, NOT EXISTS) (0) 2023.03.15 [SQL/프로그래머스] 조건에 맞는 회원수 구하기, 특정 날짜 조건 주기 (0) 2023.01.20