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 24102 게시물 읽기
No. 24102
랭킹관련 문의...
작성자
인랑초지
작성일
2005-09-15 10:48
조회수
2,364

이틀째 해메고 있습니다..ㅠㅠ..대략 하고픈것을 말하자면...게임을 한 누적 테이블에서 랭킹을 구하고 싶습니다.

 

테이블 스키마는 다음과 같습니다.

 

CREATE TABLE RECORD(

ID VARCHAR2(30) NOT NULL,

GAME_ID NUMBER(8),

RESULT CHAR(1) DEFAULT 0 NOT NULL,

EDIT_DATE DATE

)

 

 

 

CREATE TABLE USER (

USER_ID VARCHAR2(30) NOT NULL,

GAME_ID NUMBER(8),

)

 

랭킹은 RECORD테이블의 RESULT값을 참조해서 구하고 RESULT값은 1,2,3, 차례대로 승리,패배,비김을 나타냅니다.

 

그중 승리의 경우 즉 1일경우를 기준으로 값을 구하는데요 제가 해결못하고 해메는 부분은

 

USER테이블에 등록되어있지만 아직 RECORD테이블에 등록이 안ㅤㄷㅙㄴ 경우와 등록은 되어 있지만 승리한 레코드는 없

 

비기거나 진레코드만 있는경우는 랭킹을 어떻게 구하는가 인것입니다. 그리고 승리수가 같은경우는 EDIT_DATE로

 

order by를 해줍니다...도움부탁드립니다..그럼 좋은하루 되십시요..^^

 

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

쿼리를 만들기전에 우선 랭킹을 어떻게 매길것인가 기준을 마련하는게 순서일 것 같네요.

무조건 승리가 많은 사람 순으로 할 것인가, 그렇다면 승리의 횟수가 동일할 경우, 패배나 비김을 어떻게 고려해서 랭킹을 매길것인가 말것인가,

혹은 무조건 승리가 많은 것만 고려하지 않고 승률도 고려할 것인가?

등록이 되고 안되고의 문제는 그 다음에 생각할 문제입니다.

 

-- Oracle SQL Tuning 까페 http://cafe.daum.net/oraclesqltuning

장진주(zozogirl)님이 2005-09-15 12:19에 작성한 댓글입니다.

답변감사드립니다.

기획자의 의도는 승수만 가지고 판단을 하려 합니다. 승률에 따른것은

또다른 방법으로 검색할수있는 곳이 있습니다. 지금 구하려는것은

승리한수만 가지고 랭킹을 구하고 동률일경우엔 EDIT_DATE에 의해서 가장 최근에 업데이트된자료를 우선순위로 합니다.

인랑초지님이 2005-09-15 13:04에 작성한 댓글입니다. Edit

EDIT_DATE에 의해서 가장 최근에 업데이트된자료라는 말은 마지막으로 승리한 게임의 EDIT_DATE를 말하는건가요?

승리한 게임이 없고 비기거나 패한 경우만 있는 사람은요?

게임을 한적이 없는(record에 항목이 없는) 사람은요?

기준을 명확히 말씀해 주시길...

 

-- Oracle SQL Tuning 까페 http://cafe.daum.net/oraclesqltuning

장진주(zozogirl)님이 2005-09-15 13:49에 작성한 댓글입니다.

바로 그부분이 문제입니다..본문에 적어놨듯이..

게임을 안해서 아직 데이타가없는경우나 패배나 비기기만 한경우의 처리를

어떻게 해야할지 그부분을 어떻게 해야 할까 싶어서요.

그리고 날자는 말씀하신 데로입니다.가장 최근에 업데이트된 날자가 상위가 되는것이죠..

인랑초지님이 2005-09-15 14:05에 작성한 댓글입니다. Edit

질문이 모호하긴 하지만 대충 아래와 같은 결과를 원하시는 것 같습니다.

 

SELECT   r.*
    FROM (SELECT   ID, COUNT (DECODE (RESULT, '1', '승리', NULL)) victory_cnt,
                   COUNT (DECODE (RESULT, '2', '패배', NULL)) lose_cnt,
                   COUNT (DECODE (RESULT, '3', '비김', NULL)) tie_cnt,
                   MAX (edit_date) last_edit_date
              FROM RECORD
          GROUP BY ID) r,
         user u
   WHERE r.ID(+) = u.user_id
ORDER BY r.victory_cnt DESC, last_edit_date DESC

 

김주현님이 2005-09-15 14:06에 작성한 댓글입니다. Edit

select  u.game_id, edit_date,  sum(result)
from record r, user u
where record='1'  and
u.game_id = r.id(+)
group by u.game_id, edit_date
order by sum(result) desc, edit_date desc

 

이런식으로 하면,

전체 사용자(game_id ) 를 대상으로  승수만 가지고 하는거니까 result 1값만 가지고 group by 를 합니다.

game_id, edit_date는 실제 데이터상 1:1 메칭이라 한 아이디당

한개 이상의 데이터는 나오지 않을것같습니다.

이렇게 해서 정렬을 하면 되지 않을까요?...

 

어설프지만.. 도움이 되기를...

.....님이 2005-09-15 14:07에 작성한 댓글입니다. Edit

게임을 안해서 아직 데이타가없는경우나 패배나 비기기만 한경우의 처리를

어떻게 해야할지 그부분을 어떻게 해야 할까 싶어서요.

이 말은 어떻게 기준을 잡을지 모르겠다는 말씀이시죠?

쿼리가 아니라 기준을?

기준만 명확히 잡아놓는다면 쿼리는 문제없습니다.

 

-- Oracle SQL Tuning 까페 http://cafe.daum.net/oraclesqltuning

장진주(zozogirl)님이 2005-09-15 14:16에 작성한 댓글입니다.

그렇습니다..진주님..ㅠㅠ...첨으로 게임관련쪽으로 만들다 보니..

도데체 개념이 안서내요..원래 실력도 없지만..^^;;...

인랑초지님이 2005-09-15 14:27에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
24105TOAD 실행.. [1]
김준기
2005-09-15
1859
24104Insert 중에 테이블 먹통 [2]
1111
2005-09-15
1782
24103질문 이 쿼리의 사용하면, 중복이 일어나는데, 날짜중에 최신것만 뽑을려면 어떻게? [2]
강명원
2005-09-15
1503
24102랭킹관련 문의... [8]
인랑초지
2005-09-15
2364
24101급합니다. 9i Client에서 10g로 접속하여 export시 에러... [6]
이무기
2005-09-15
7472
24100저기...mview가 뭔가요? [1]
궁금이
2005-09-15
1632
24098new system에 oracle 탑재에 관한 질문 [3]
짱장군
2005-09-15
1030
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다