데이터 출력 어렵네요ㅜㅜ 0 2 4,630

by 데린이 [SQL Query] [2024.06.28 13:17:27]


이래 표처럼 데이터를 출력하고 싶은데 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%
by 마농 [2024.06.28 14:06:49]

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
;

 


by 데린이 [2024.06.28 16:14:40]

감사합니다!!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입