이래 표처럼 데이터를 출력하고 싶은데 case문만 생각나네요ㅜㅜ
postgresql 사용합니다.
아래 표처럼 만들때 이 쿼리를 간단하게 바꿀수 있을까요 ?
CASE WHEN COALESCE((TOTN::NUMERIC(10,2) /NULLIF(TOT, 0) *100),0) = 0 THEN '0' ELSE TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM TO_CHAR(((TOTN::NUMERIC(10,2) /NULLIF(TOT, 0))*100) , 'FM999999999.00')))||'%' END
비율 |
100% |
0 |
95.12% |
1. * 100 을 수식의 제일 앞으로 빼면서 소수점을 붙여주면 (100. *) ::NUMERIC(10,2) 형변환 제거 가능
2. TO_CHAR 의 포멧을 .00 이 아닌 .99 로 바꾸면 TRIM(0) 부분 줄일 수 있습니다.
3. 모든 처리 후에 COALESCE 처리 하면 CASE 문을 줄일 수 있습니다.
WITH t AS ( SELECT 100 totn, 100 tot UNION ALL SELECT 10, 100 UNION ALL SELECT 0, 0 UNION ALL SELECT 9512, 10000 ) SELECT totn , tot , COALESCE(TRIM(TRAILING '.' FROM TO_CHAR(100. * totn / NULLIF(tot, 0), 'FM990.99')) ||' %', '0') x FROM t ;