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 – 대용량 데이터베이스