등급 계산 쿼리 질문 드립니다. 0 2 3,890

by 손님 [DB 기타] [2014.02.03 02:27:53]


등급 관련 풀리지 않는 문제가 있어서 질문 드립니다.

우선 등급 관리 테이블이 있습니다.

등급   비율
10    5%
9 15%
8  10%
7  10%
6  10%
5  10%
4  10%
3  10%
2  15%
1  5%
만약 인원이 100명이라면

1등부터 5등까지 10등급
6등부터 20등까지 9등급
21등부터 30등까지 8등급
31등부터 40등까지 7등급
41등부터 50등까지 6등급
51등부터 60등까지 5등급
61등부터 70등까지 4등급
71등부터 80등까지 3등급
81등부터 95등까지 2등급
96등부터 100등까지 1등급 으로 매겨져야합니다.

인원의 점수는 랭킹 개념이구요
동일점수에 대해서는
1 100점
1 100점
3  90점
4  80점
5  85점
5  85점
7  70점
으로 생성이 됩니다.

문제는 등급도 10등급으로 정해진게 아니구요

2등급에서 10등급까지 선택하여 옆에 비율도 직접 입력이 가능합니다.

5등급이라고 예를 들면

5등급  20%
4등급  30%
3등급  20%
2등급  20%
1등급  10%

으로 동적으로 가능합니다.

또한가지 문제가. 오라클을 사용하지 않고 sysbase를 사용하고 있습니다.

오라클 함수는 사용이 안될거같습니다.

수식만으로 해결해야 할거같은데 머리고 도무지 돌지가 않네요.

고수님들 답변 부탁드립니다. ㅜㅜ

by 마농 [2014.02.03 08:52:38]
WITH point_t AS
(
SELECT /*+ materialize */
       LEVEL pk
     , ROUND(dbms_random.value(60, 100)) point
  FROM dual
 CONNECT BY LEVEL <= 100
)
, code_t AS
(
SELECT 10 grd, 5 rat FROM dual
UNION ALL SELECT 9, 15 FROM dual
UNION ALL SELECT 8, 10 FROM dual
UNION ALL SELECT 7, 10 FROM dual
UNION ALL SELECT 6, 10 FROM dual
UNION ALL SELECT 5, 10 FROM dual
UNION ALL SELECT 4, 10 FROM dual
UNION ALL SELECT 3, 10 FROM dual
UNION ALL SELECT 2, 15 FROM dual
UNION ALL SELECT 1,  5 FROM dual
)
-- Sybase 환경이 안되어 Oracle 에서 작성 했습니다.
-- With 구문은 테스트용 데이터를 생성하기 위한 용도로 실 사용시 제거하시면 되구요.
-- ANSI JOIN 구문을 사용했습니다.(Sybase 에서도 작동할것 같습니다.)
SELECT *
  FROM (SELECT b.pk, b.point
             , COUNT(c.pk) + 1 rk
             , (COUNT(c.pk) + 1) / a.cnt * 100 AS rat
          FROM (SELECT COUNT(*) cnt FROM point_t) a
         CROSS JOIN point_t b
          LEFT OUTER JOIN point_t c
            ON b.point < c.point
         GROUP BY a.cnt, b.pk, b.point
        ) a
 INNER JOIN
       (SELECT a.grd
             , SUM(CASE WHEN a.grd = b.grd THEN 0 ELSE b.rat END) rat_f
             , SUM(b.rat) rat_t
          FROM code_t a
         INNER JOIN code_t b
            ON a.grd <= b.grd
         GROUP BY a.grd
        ) b
    ON a.rat >  rat_f
   AND a.rat <= rat_t
 ORDER BY rk
;

by 손님 [2014.02.04 14:14:49]

마농님 정말 감사합니다.

키는 셀프조인에 있었네요. 약간 제 쿼리에 맞춰서 해결 했습니다.

감사합니다.^^

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