비율구하는 SQL 조언부탁드립니다. 0 4 1,104

by lgxj20 [2020.04.13 10:22:01]


CMON_CD CMON_CD_NM T1 T2
11 택가 103645300 49260000
12 할인액 44788700 18716600
40    할인율(%) 210.65 79.41
13 실판매가 58856600 30543400
22 판매수수료 4443446 5307995
41    수수료율(%) 48.67 33.6

 

이런식으로 나오는데요..문제는 할인율,수수료율 을 재계산을 해야됩니다.

우선 위내용은 전체 SUM을 수해서 나온결과인데 문제는 SUM을하니 각각 구한 할인율,수수수료율도 SUM이되서 문제가 됩니다. (GROUPBY PIVOT으로 우선 SELECT 해서 가져옵니다.)

그래서 SUM한 데이타를 가지고 다시 비율을 구하야되는데요 할인율은 CMON_CD = '11','12' 를 가져오는데 '12' / '11' 값이면 수수료율은 CMON_CD = '13','22' 를 가져오는데 '22' / '13' 의 값입니다.

지금일단 함수로 각각의 값을 가져와서 계산을 할까 생각중인데...이게 마지막으로 안될때 이렇게 함수로 계산하는 방법을 생각중입니다.

더좋은 방법이 있을까요?

by 마농 [2020.04.13 11:17:18]

중간 결과 집합으로 질문하시면 오히려 비효율이 있을 수 있습니다.
한번에 쉽게 뽑을 수 있는 걸, 단계를 나누어 어렵게 처리해야 할 수도 있기 때문입니다.
원본 집합이나 중간 결과를 뽑는 쿼리로 질문해 주시는게 좋습니다.


by lgxj20 [2020.04.13 15:09:35]

그냥 서브쿼리로 처리했는데요..조금 하드코딩이 들어가긴하네요.


by 마농 [2020.04.13 15:51:23]

더 좋은 방법이 필요하다면 구체적으로 질문해 주세요.


by 마농 [2020.04.14 08:22:40]
WITH t AS
(
SELECT '11' cmon_cd, '택가' cmon_cd_nm, 103645300 t1, 49260000 t2 FROM dual
UNION ALL SELECT '12', '할인액'     ,  44788700, 18716600 FROM dual
UNION ALL SELECT '40', '할인율(%)'  ,    210.65,    79.41 FROM dual
UNION ALL SELECT '13', '실판매가'   ,  58856600, 30543400 FROM dual
UNION ALL SELECT '22', '판매수수료' ,   4443446,  5307995 FROM dual
UNION ALL SELECT '41', '수수료율(%)',     48.67,     33.6 FROM dual
)
SELECT *
  FROM t
 MODEL
 DIMENSION BY (cmon_cd)
 MEASURES (cmon_cd_nm, t1, t2)
 RULES ( t1['40'] = ROUND(t1['12'] / t1['11'] * 100, 2)
       , t2['40'] = ROUND(t2['12'] / t2['11'] * 100, 2)
       , t1['41'] = ROUND(t1['22'] / t1['13'] * 100, 2)
       , t2['41'] = ROUND(t2['22'] / t2['13'] * 100, 2)
       )
;

 

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