database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 38724 게시물 읽기
No. 38724
목표값 찾기??
작성자
양승일(ysistar)
작성일
2011-07-21 11:22ⓒ
2011-07-21 11:29ⓜ
조회수
4,921

보할 등급 점수 보할점수
62.92298 A 0.9 56.6306847
4.712969 F 0.4 1.8851876
2.900892 F 0.4 1.1603568
5.781953 F 0.4 2.3127812
3.382684 F 0.4 1.3530736
9.0821 F 0.4 3.63284
5.067306 A 0.9 4.5605754
2.306727 A 0.9 2.0760543
3.842385 A 0.9 3.4581465
100     77.0697001

보할 : 전체 금액에서 각 Item의 단가 * 수량한 금액의 비율 (전체합은 100)

등급 : A/F 두개의 등급이 존해하며 A일 경우 0.9, F일경우 0.4

보할점수 : 보할 * 등급별 점수 적용

이때 Row는 물론 가변적이구요..

전체 보할점수의 합을 목표값으로 지정했을 경우...

Item별 등급 부여후 보할점수의 합계를 계산하여 목표값에 가장 근사치의 경우를 선택하려고 할때

Row수가 증가하면 할수록 2^Row건수만큼 경우의 수가 발생하여..속도가 엄청 느려지네요.

(등급이 모두 A인 경우에서부터 모두 F인 경우까지..AAAAAAAAAAAA => FFFFFFFFFFFF)

고수님들의 조언 좀 부탁드릴께요.

 

 

이 글에 대한 댓글이 총 5건 있습니다.

설명이 이해가 잘 안가네요.

결국 원하시는 결과는 어떤거죠?

원하시는 결과가 어떤건지 보여주실 수 있나요?

마농(manon94)님이 2011-07-21 13:16에 작성한 댓글입니다.

  ITEM 합계
  보할 62.922983 4.712969 2.900892 5.781953 3.382684 9.0821 5.067306 2.306727 3.842385
Case 1 등급 A A A A A A A A A  
보할점수 56.63 4.24 2.61 5.20 3.04 8.17 4.56 2.08 3.46 90.00
Case 2 등급 A A A A A A A A F  
보할점수 56.63 4.24 2.61 5.20 3.04 8.17 4.56 2.08 1.54 88.08
Case 3 등급 A A A A A A A F A  
보할점수 56.63 4.24 2.61 5.20 3.04 8.17 4.56 0.92 3.46 88.85
                     
Case 512 등급 F F F F F F F F F  
보할점수 25.17 1.89 1.16 2.31 1.35 3.63 2.03 0.92 1.54 40.00

 

이런식으로 최종 결과가 보여질 수 있겠네요.

여기서 보할은 전체 item에서 차지하는 해당 제품의 비율이고요.

각 제품마다 등급을 부여하여, 보할 * DECODE(등급, 'A', 0.9, 0.4)  를 계산한 후,  합한 보할 점수가,

원하는 점수에 가장 가까운 Case를 찾아내려고 합니다.

양승일님이 2011-07-21 14:45에 작성한 댓글입니다. Edit

 WITH t AS

(-- 원본 --
SELECT 62.922983 v FROM dual
UNION ALL SELECT 4.712969 FROM dual
UNION ALL SELECT 2.900892 FROM dual
UNION ALL SELECT 5.781953 FROM dual
UNION ALL SELECT 3.382684 FROM dual
UNION ALL SELECT 9.082100 FROM dual
UNION ALL SELECT 5.067306 FROM dual
UNION ALL SELECT 2.306727 FROM dual
UNION ALL SELECT 3.842385 FROM dual
)
, t1 AS
(-- 행번호 추가 --
SELECT ROWNUM rn, v FROM t
)
, t2 AS
(-- 등급 --
SELECT 'A' g, .9 r FROM dual
UNION ALL SELECT 'F', .4 FROM dual
)
, t3 AS
(-- 등급 경우의 수 --
SELECT sys_connect_by_path(g, ',') g
     , sys_connect_by_path(r, ',') r
  FROM (SELECT * FROM t1, t2)
 WHERE LEVEL = (SELECT COUNT(*) FROM t)
 START WITH rn = 1
 CONNECT BY PRIOR rn + 1 = rn
)
SELECT g
     , SUM(v * REGEXP_SUBSTR(r, '[^,]+', 1, rn)) x
  FROM t1, t3
 GROUP BY g
 ORDER BY x DESC
;
마농(manon94)님이 2011-07-21 15:16에 작성한 댓글입니다.
이 댓글은 2011-07-21 15:17에 마지막으로 수정되었습니다.

마농님 훌륭하십니다. 감사드리고요..

Item수가 1개 증가할 때마다 처리속도가 약 두배정도 증가되는데요..

좋은 해법이 없을까요^^

양승일님이 2011-07-21 18:29에 작성한 댓글입니다. Edit

 음... 글쎄요...

요구사항 자체가 기하급수적으로 늘어나는 경우의 수라서...
아이템은 몇개나 되나요?
마농(manon94)님이 2011-07-22 08:44에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38727오라클 10g 설치 방법을 알고 싶습니다. [1]
김연오
2011-07-22
3690
38726오라클 이중 디비링크 질문 입니다. [2]
애로천사
2011-07-21
4567
38725출석부를 구현하고 싶습니다..ㅠ.ㅠ 도움 부탁드립니다. [1]
공부하자
2011-07-21
4808
38724목표값 찾기?? [5]
양승일
2011-07-21
4921
38723급하게 질문올립니다 디비접속시 ORA04031 에러와 디비 접속 불 [1]
신휘호
2011-07-21
4213
38722그룹 문의 [1]
레이첼
2011-07-20
3144
38721회비 납부 관련 문의 [3]
강진묵
2011-07-20
4202
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다