알고리즘 챌린지

패스트캠퍼스 챌린지 42일차

JUN0126 2022. 3. 6. 23:24

조인 (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

              

 

 

 

42일차 인증

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr