일정 비율로 값을 변경할 때 소수점 없애는 방법 문의 드립니다. 1

by kskim [SQL Query] [2024.01.30 18:05:39]


안녕하세요. 숫자를 임의로 변경해야 할때, 비율로 조정하고 싶은데 현업에서는 보통 퍼센트나 반올림 처리를 어떻게 하는지 궁금해서 문의드립니다.
컬럼이 82 , 2322 ,78 로 총 2482를 1200으로 변경하고 싶습니다. 각 숫자의 퍼센트를 구하고 퍼센트로 고칠 숫자를 산출하고 싶은데요.
소수점을 없애는 과정을 어떤식으로 해야 가장 정확할지 궁금하네요! 그냥 round만 쓰면 목표인 1200이 1201로 바뀌더라구요 ㅠㅠ

WITH tmp_table AS (
SELECT  82 qty , -1282 AS GAP
FROM DUAL
UNION ALL

SELECT 2322, -1282
FROM DUAL
UNION ALL

SELECT  78, -1282
FROM DUAL
)
SELECT  QTY "원래 수량",
        RATIO_TO_REPORT(qty) Over ()"퍼센트",
        QTY+RATIO_TO_REPORT(qty) Over ()* GAP "보정 RAW",
        ROUND(QTY+RATIO_TO_REPORT(qty) Over ()* GAP) "보정 후 수량"
FROM tmp_table


by 마농 [2024.01.31 00:05:13]
WITH tmp_table AS
(
SELECT 82 qty, -1282 AS GAP FROM dual
UNION ALL SELECT 2322, -1282 FROM dual
UNION ALL SELECT   78, -1282 FROM dual
)
-- 가장 큰 값에서 오차 보정 하는 방안
SELECT qty
     , ROUND(qty * y / x)
     + DECODE(rn, 1, y - SUM(ROUND(qty * y / x)) OVER(), 0) z
  FROM (SELECT qty
             , SUM(qty) OVER()       x
             , SUM(qty) OVER() + gap y
             , ROW_NUMBER() OVER(ORDER BY qty DESC) rn
          FROM tmp_table
        )
;

 

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