본문 바로가기

02. SQLP 스터디/03. 기출

SQLP 48-2

https://cafe.naver.com/sqlpd  
실기 2. index 생성 : 주문번호 + 주문일자

주문 + 주문상세 + 상품 으로 조인 하고,

주문일자로 order by 한 결과를 rownum <=10 로 처리 후,

고객과 left join 하였음 ( 고객과 주문은 optional 관계 였음 )

* 부분범위처리가 문제핵심으로 생각하였음.

 
select nvl(b.고객명,'비회원) as 고객명 , a.주문일자

from ( select /*+ index(주문, 주문_idx) */ c.고객번호, c.주문일자

from 상품 a, 주문상세 b, 주문 c

where a.상품유형 = 'V10'

and a.상품코드 = b.상품코드

and b.주문번호 = c.주문번호

and c.주문일자 between '~~~' and '~~~' -- 조건 생각 안 남

order by c.주문일자 ) a, 고객 b

where a.rownum <= 10

and a.고객번호 = b.고객번호(+) ;

 

[실기풀이 참고]

실기 1. 주문을 고객번호, 주문일자로 주문금액을 sum

이후 고객정보를 조인해서 고객명 추출

그리고 데이터복제로 월별, 일별을 나눠서 group by 로 처리하였음.

* function을 조인으로 바꾸는 것이 문제핵심으로 생각하였음

 

select decode(c.no, 1, '일별','월별) 주문유형 ,

decode(c.no, 1, b.주문일자, b.주문월) 주문구분,

b.고객등급,

sum(b.주문금액) 주문금액

from ( select substr(a.주문일시,1,8) 주문일자 ,

substr(a.주문일시,1,6) 주문월 ,

a.고객번호,

sum(a.주문금액) 주문금액

from 주문 a

where 주문일시 between '~~' and '~~' -- 조건 생각 안 남

group by substr(a.주문일시,1,8) 주문일자 ,

substr(a.주문일시,1,6) 주문월 ,

a.고객번호 ) a1 ,

고객 b ,

(select level as no from dual connect by level <=2 ) c

where a1.고객번호 = b.고객번호

group by decode(c.no, 1, '일별','월별) 주문유형 ,

decode(c.no, 1, b.주문일자, b.주문월) 주문구분,

b.고객등급 ;

실기 2. index 생성 : 주문번호 + 주문일자

주문 + 주문상세 + 상품 으로 조인 하고,

주문일자로 order by 한 결과를 rownum <=10 로 처리 후,

고객과 left join 하였음 ( 고객과 주문은 optional 관계 였음 )

* 부분범위처리가 문제핵심으로 생각하였음.

 

select nvl(b.고객명,'비회원) as 고객명 ,

a.주문일자

from ( select /*+ index(주문, 주문_idx) */ c.고객번호, c.주문일자

from 상품 a, 주문상세 b, 주문 c

where a.상품유형 = 'V10'

and a.상품코드 = b.상품코드

and b.주문번호 = c.주문번호

and c.주문일자 between '~~~' and '~~~' -- 조건 생각 안 남

order by c.주문일자 ) a, 고객 b

where a.rownum <= 10

and a.고객번호 = b.고객번호(+) ;

 

'02. SQLP 스터디 > 03. 기출' 카테고리의 다른 글

SQLP 46 [2022.09.04]  (3) 2025.04.07
SQLP 47  (0) 2025.04.07
SQLP 48-1  (0) 2025.04.07
SQLP 49-2  (0) 2025.04.06
SQLP 49-1  (0) 2025.04.06