SQL*Plus, 문제풀이

SQL*Plus, 문제풀이

Q: 제품이 ‘A’로 시작하는 로우(10,000건)를 읽어서 ‘A1, A2’는 ‘제품1’, ‘A3, A5, A6’는 ‘제품2’, ‘A4’는 ‘제품3’으로 하고, 나머지는 모아서 ‘제품4’로 한다.

제품별로 생산일이 ‘1~5일’은 1주기, ‘6~15일’은 2주기, ’16~25일’은 3주기, ’26~말일’은 4주기로 하여 1월부터 6월까지의 월별 평균 생산량의 추이를 분석하라.

A:

SELECT
	'제품' || ITEM
	, decode(floor(DD/6),0,1
	, decode(floor(DD/16),0,2
	, decode(floor(DD/26),0,3,4)))
	, sum(decode(MM,’01’,수량))*100 / sum(decode(MM,’01’,1))
	, sum(decode(MM,’06’,수량))*100 / sum(decode(MM,’06’,1))
	, sum(수량) / count(*)
FROM 
(  
	SELECT decode(substr(제품,2,1), 
		'1', '1', '2', '1', '3', '2', '5', '2', '6', '2', '4', '3', '4') as item
		, substr(생산일,3,2) as mm
		, substr(생산일,5,2) as dd
		, sum(수량) as qty
	FROM  생산테이블
	WHERE 생산일 between '980101' and '980630'
	AND 제품 like 'A%'
	GROUP BY decode(substr(제품,2,1),
		'1', '1', '2', '1', '3', '2', '5', '2', '6', '2', '4', '3', '4')
		, substr(생산일,3,2)
		, substr(생산일,5,2)
)
GROUP BY ITEM
	, decode(floor(DD/6),0,1
	, decode(floor(DD/16),0,2
	, decode(floor(DD/26),0,3, 4)));

원문 출처
Encore – 대용량 데이터베이스

Leave a Reply