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
운영게시판
최근게시물
Sybase Q&A 900 게시물 읽기
No. 900
[급질] 그룹내에서 순위구하는 프로그램..
작성자
김신영(doorum)
작성일
2004-04-01 09:43
조회수
7,004
▣  같은 반 내에서 순위 구하는 쿼리문을 알고 싶습니다... 
     예를 들어보면,
======================================================

EX. DB
          학반  성적     이름
   ----------------------------
           A    100     홍길동
           A     80     홍길서
           B     90     홍길남
           A     70     홍길북
           B    100     홍일동
           A     10     홍일서

EX. 원하는 결과

         학반  성적    이름        순위
   ---------------------------------------------------
           A    100     홍길동       1
           A     80     홍길서       2
           B     90     홍길남       2
           A     70     홍길북       3
           B    100     홍일동       1
           A     10     홍일서       4
======================================================
학반별로, 성적별로 ordering은 했는데... 
반별 순위를 어케 매겨야 될는지 모르겠네요.


▣ 다음의 쿼리를 돌려봤는데.. 에러가 나더라구요...
======================================================
Select 학반,성적,이름,(Select Count(*) + 1
                               From #A B 
                               Where A.학반 = B.학반 And A.성적 < B.성적) as 순위
From #Table A
Order By 학반, 순위
======================================================

▣ 위 쿼리를 돌렸을때, 에러는
======================================================
<eb1>General error: RAISERROR executed:  
-- (df_Heap.cxx 4717) 
State:S1000,Native:-1005004,Origin:[Sybase][ODBC Driver][Adaptive Server IQ]</eb1>
======================================================
이런 에러가 납니다.. (뭔소린지.. -.-)


▣ identity를 쓰면 된다고도 하는데.. 
    create table어쩌구.. 가 안 되는거 같더라구요...... -.-
아, 저는 ASIQ를 사용하고 있구요... 완전초보라서리......... ㅠ.ㅠ
음.. 어렵네요.. -.- 모쪼록 우문현답 부탁드립니다~

 

 

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

원하는 결과가 성적에 따른 순위를 만드는것 같은데요.

제 생각에는 순위를 만들려면 성적별로 그룹핑을 하고 그 성적을 ordering, number을 만든 후에 결과와  원본 테이블을 조인하면 성적에 따른 순위가 나올거 같은데요.

 

select number(*), 성적  from 테이블 group by 성적 order by 성적

 

하면 성적에 따른 순위가 나올것 같네요.

-- iq에서 numbering은 그룹절에 없어도 상관 없었던것 같은데 확신이 서지 않네요.

 

 

yheey님이 2004-04-01 22:42에 작성한 댓글입니다. Edit

ASIQ는 rank함수가 있다는 군요

지연님이 2004-04-02 09:14에 작성한 댓글입니다. Edit

asiq에서 테스트해 보았슴다.

 

create table #tmp
(학반 char(1),
성적 int,
이름 char(10)
);

insert into #tmp values ('A',100,'홍길동');
insert into #tmp values ('A', 80,'홍길서');
insert into #tmp values ('B', 90,'홍길남');
insert into #tmp values ('A', 70,'홍길북');
insert into #tmp values ('B',100,'홍길동');
insert into #tmp values ('A', 10,'홍길서');

 

-- rank() 함수를 사용

-- 전체적인 순위를 구해줍니다.

select 학반, 성적, 이름, rank() over(order by 학반,성적 desc) as 순위
from #tmp
order by 학반, 성적 desc
;

< 결과 >

학반 성적        이름       순위                
---- ----------- ---------- --------------------
A    100         홍길동     1                   
A    80          홍길서     2                   
A    70          홍길북     3                   
A    10          홍길서     4                   
B    100         홍길동     5                   
B    90          홍길남     6                   
 
6 Row(s) affected

 

-- 다음은 self 조인을 이용하여 자신보다 성적이 좋은 사람이

-- 몇명인지를 count하여 순위를 구하는 방법입니다.

-- 이게 원하는 결과죠? ^^

select a.학반, a.성적, a.이름, 순위 = count(*)
from #tmp a, #tmp b
where a.학반 = b.학반
and a.성적 <= b.성적
group by a.학반, a.성적, a.이름
order by a.학반, a.성적 desc
;

< 결과 >

학반 성적        이름       순위                
---- ----------- ---------- --------------------
A    100         홍길동     1                   
A    80          홍길서     2                   
A    70          홍길북     3                   
A    10          홍길서     4                   
B    100         홍길동     1                   
B    90          홍길남     2                   
 
6 Row(s) affected

장형운(좋은구름)님이 2004-04-06 13:10에 작성한 댓글입니다.

oracle에서는 rank() 에서 partition by를 지원하는거 같은데,

asiq에서는 지원되지 않는군요 ㅠ.ㅠ;

계속 찾아봐야 겠습니다.

 

select 학반, 성적, 이름, rank() over(PARTITION by 학번 order by 성적 desc) as 순위
from #tmp

 

이게 되면 얼마나 좋을까나...

장형운(좋은구름)님이 2004-04-06 13:31에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
903[질문]OLEDB 설치후.. [1]
이쁜깡패
2004-04-06
3495
902고수님들 답변좀 부탁드립니다. 넘급해요 [2]
잘하자
2004-04-03
6154
901[질문]클라이언트에서의 또 하나의 서버로 사용이 가능한지요..급해요 [3]
진기섭
2004-04-02
3020
900[급질] 그룹내에서 순위구하는 프로그램.. [4]
김신영
2004-04-01
7004
899[질문]primary key 삭제하고싶어요 [2]
이지현
2004-03-31
4258
898설치하는데 이상.?? [1]
초보람다
2004-03-31
5062
897메모리 관련 질문입니다. [3]
이동복
2004-03-31
3105
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다