CASE, GROUP BY 활용
'HP'라는 제품은 너무 많은 등급을 가지고 있어 제품별로 분석하기를 원하고,
'LD'라는 제품은 등급의 수가 적고 중요하므로 등급별로 분석하기를 원하며,
'PP'라는 제품은 다양한 등급을 가지고 있으나 'P530C'라는 등급은 전략적으로 관리하고자 하여 등급별로 분석하고,
나머지는 기타로 모아주기를 원한다고 생각하자
이런 경우에는 CASE와 GROUP BY를 활용하여 풀어보자
SELECT
CASE WHEN 제품 = ‘HP’ THEN 제품
WHEN 제품 = ‘LD’ THEN 등급 ,
WHEN 등급 = ‘P530C’ THEN 등급
ELSE ’기타‘
END
FROM 매출테이블
WHERE 매출일자 LIKE ’9808%’
GROUP BY CASE WHEN 제품 = ‘HP’ THEN 제품
WHEN 제품 = ‘LD’ THEN 등급 ,
WHEN 등급 = ‘P530C’ THEN 등급
ELSE '기타'
END
SALE_HIST 테이블을 참조하여 ‘PENCIL’ 총 판매금액과 01번 사업장의 총판매금액과
ERASER를 판매하고 있는 사업장의 총판매 금액을 출력하고 그 나머지를 기타로 묶어 총 판매금액을 출력하시오
SELECT
CASE WHEN SALE_ITEM = 'PENCIL' THEN SALE_ITEM
WHEN SALE_ITEM = 'ERASER' THEN SALE_SITE
WHEN SALE_SITE = 01 THEN SALE_SITE
ELSE '기타'
END AS 특별관리항목,
SUM(SALE_AMT) AS 총판매금액
FROM SALE_HIST
GROUP BY CASE WHEN SALE_ITEM = 'PENCIL' THEN SALE_ITEM
WHEN SALE_ITEM = 'ERASER' THEN SALE_SITE
WHEN SALE_SITE = 01 THEN SALE_SITE
ELSE '기타'
END
TEST100 테이블을 참조하여 C2에 해당하는 값의 비율을 구하여라
SELECT C1, C2
,ROUND(RATIO_TO_REPORT(C2) OVER(),2) * 100 AS PER
FROM TEST100
TEST35 테이블을 참조하여 KEY1은 부서라고 생각하고 KEY2의 A는 판매액 B는 매입액이라고 할 때
부서별 판매액과 매입액의 차에대한 값(수익)을 구하고 차액의 비율을 구하시오
SELECT
CASE WHEN KEY1 IS NOT NULL THEN KEY1 ELSE '합계' END AS KEY1
, SUM(CASE WHEN KEY2 = 'A' THEN AMT ELSE 0 END) AS 판매액
, SUM(CASE WHEN KEY2 = 'B' THEN AMT ELSE 0 END) AS 매입액
, SUM(CASE WHEN KEY2 = 'A' THEN AMT ELSE - AMT END) AS 수익
, ROUND(SUM(CASE WHEN KEY2='A' THEN AMT ELSE -AMT END)/ SUM(CASE WHEN KEY2='A' THEN AMT END)*100 )AS PER
FROM (SELECT KEY1, KEY2, SUM(AMT) AMT
FROM TEST35
GROUP BY ROLLUP(KEY1), KEY2
)
GROUP BY CASE WHEN KEY1 IS NOT NULL THEN KEY1 ELSE '합계' END
ORDER BY KEY1
'IT_Web > Oracle' 카테고리의 다른 글
Oracle - 데이터 연결의 다양한 방법 (0) | 2020.05.22 |
---|---|
Oracle 컬럼 합계와 행 합계 동시에 만들어서 출력, 윈도우함수 (0) | 2020.03.09 |
Oracle RATIO_TO_REPORT 전체실적에서 개인실적 비율구하기, WITH절 사용하기 (0) | 2020.03.09 |
Oracle ROLLUP, GROUPING SETS활용 TYPE 별 가격 합계, 소계 출력하기 (0) | 2020.03.09 |
Oracle WITH 절 특징 및 개념 (0) | 2020.03.08 |