개발하자

[ORACLE] 오라클 각 데이터 건수 및 퍼센트 구하기 ( 결과가 0일 경우 0으로 반환) 본문

DATABASES/ORACLE︲TIBERO

[ORACLE] 오라클 각 데이터 건수 및 퍼센트 구하기 ( 결과가 0일 경우 0으로 반환)

개발리미 2023. 11. 29. 17:57
728x90

 

각 데이터 건수 및 퍼센트 구하기
건수, 퍼센트 구하기는 간단하지만 결과 수가 0일 경우 데이터가 안나와서 여러방법을 많이 시도 했다..
해결 방법은 오라클 DUAL 테이블을 사용해서 무조건 표출되게 하는 것이다.
DUAL 테이블은 사용자가 함수(계산)을 실행할 때 임시로 사용하는데 적절!! 

 


SELECT		
		A.STATUS,	
		COUNT(B.CATEGORY_CODE) AS CNT,		
		CASE WHEN SUM(COUNT(B.CATEGORY_CODE)) OVER() = 0 THEN 0 
		ELSE TO_NUMBER(ROUND((COUNT(B.CATEGORY_CODE) / NULLIF(SUM(COUNT(B.CATEGORY_CODE)) OVER(), 0)) * 100, 1),'999.9')  
		END AS PERCENTAGE 
		FROM (						
			SELECT						
			CASE ROWNUM					
			WHEN 1 THEN '접수'			
			WHEN 2 THEN '처리중'		
			WHEN 3 THEN '수용불가'		
			WHEN 4 THEN '중장기검토'	
			WHEN 5 THEN '완료'			
			END AS STATUS				
			FROM DUAL					
			CONNECT BY LEVEL <= 5		
		) A							
		LEFT JOIN (					
			SELECT 					
			CATEGORY_CODE,				
			CASE WHEN CATEGORY_CODE = 'IN' THEN '접수'			
			WHEN CATEGORY_CODE = 'ON' THEN '처리중'		
			WHEN CATEGORY_CODE = 'NO' THEN '수용불가'		
			WHEN CATEGORY_CODE = 'LO' THEN '중장기검토'	
			WHEN CATEGORY_CODE = 'RE' THEN '완료'			
			ELSE ''	 END AS STATUS							
			FROM TABLENAME
		) B ON A.STATUS = B.STATUS		
		GROUP BY A.STATUS				
		ORDER BY						
		CASE STATUS						
		WHEN '접수' THEN 1				
		WHEN '처리중' THEN 2			
		WHEN '수용불가' THEN 3			
		WHEN '중장기검토' THEN 4		
		ELSE 5 END;

 

접수, 처리중, 수용불가, 중장기검토, 완료의 각 건수와 퍼센테이지를 표출해야 했다
하지만 완료가 아예 없을 경우 접수, 처리중, 수용불가, 중장기검토만 나오고 완료는 조회가 안되서 한참 고민을 했었다..
이럴때 DUAL을 사용해서 먼저 SELECT 한 다음 -> 실제 테이블과 조인 -> GROUP BY 해주면 끝!
쿼리를 확인해보면 'CONNECT BY LEVEL <= 5' 가 있는데 여기서 5는 표출할 데이터 수다.
나는 접수~완료까지 총 5개 조회를 해야하니 5로 설정했다.

 


공부하면서 유용했던 부분 메모겸 공유하고자 끄적입니다.

고쳐야하는 부분있다면 댓글 남겨주시면 수정하겠습니다.

행복한 하루 보내세요 (❁´◡`❁)

728x90
반응형