조인 (inner join, outer join, self join)
JOIN 예제
tProduction 테이블은 직원들이 제품을 생산한 정보가 들어잇는 테이블이다
tOrder 테이블은 제작된 제품을 고객들이 주문한 정보가 들어있는 테이블
tItem 테이블은 생산하기 위한 제품들의 정보가 들어있는 테이블
2022년 3월 20일 기준 현재 판매 가능한 공책의 재고량을 구하시오 (반품되어 돌아온 공책의 경우 재판매 하지 않는다.)
정답
select tBase.IName as 제품명, (tBase2.PCount - tBase.OCount) as 재고량 // 총 생산량 - 제품 판매량
from ( select tit.IName, sum(tpr.PCount) as OCount
from tProduction as tpr
join tOrder as tor
on tpr.Pnumber = tor.PNumber
join tItem as tit
on tpr.Inumber = tit.Inumber
where tit.IName = '공책' and tor.Odate < cast('20220321' as timestamp)
group by tit.IName
) as tBase // 공책의 총 판매량을 구하는 tBase
join ( select tit.IName, sum(tpr.PCount) as PCount
from tProduction as tpr
join tItem as tit
on tpr.INumber = tit.INumber
where tit.IName = '공책' and tpr.PDate < cast('20220321' as timestamp)
group by tit.IName
) as tBase2
on tBase.IName = tBase2.IName
OUTER JOIN 예제
tProduction : 직원 제품 생산 정보 테이블, tItem : 생산하기 위한 제품 정보 테이블
2020년 1월 제품 별 생산량 순위를 확인하기 위한 제품명과 생산량을 순위를 매겨 출력
모든 제품이 출력되어야 하며 공동 순위가 있다면 다음 순위는 공동 순위의 수 만큼 밀려나고
생산되지 않은 제품은 제일 마지막 순위로 결정된다
정답
select tit.IName as 제품명, tBase.PCount as 생산량, rank() over(order by tBase.PCount desc nulls last) as 생산량_순위
from tItem as tit
left join
( select tpr.INumber, sum(tpr.PCount) as PCount
from tProduction as tpr
where to_char(tpr.PDate.'YYYYMM') = '202001'
group by INumber
) as tBase
on tit.INumber = tBase.INumber
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'알고리즘 챌린지' 카테고리의 다른 글
패스트캠퍼스 챌린지 45일차 (0) | 2022.03.09 |
---|---|
패스트캠퍼스 챌린지 44일차 (0) | 2022.03.08 |
패스트캠퍼스 챌린지 41일차 (0) | 2022.03.05 |
패스트캠퍼스 챌린지 40일차 (0) | 2022.03.04 |
패스트캠퍼스 챌린지 39일차 (0) | 2022.03.03 |