각 항목별로 하나의 결과를 보고싶을때 0 6 1,703

by 송미진 [2007.11.28 11:11:06]


==============================

시험번호   이름   점수    반

==============================

   0001    김말자   90  개나리반

   0001    김덕순   90  진달래반

   0002    박영희   70  개나리반

   0003    김영은   80  장미반

   0003    이예은   80  국화반

   0003    장지혜   80  개나리반

==============================

 

각 시험별로 최고 득점자를 뽑았습니다.

동점자가 있는데요....

동점자를 출력하지 않고 각 시험별로 한명만 결과를 보고싶습니다.

이름순으로 asc해서요.

어떻게 해야하죠?

 

by 채용근 [2007.11.28 00:00:00]
SELECT * FROM (
SELECT ROW_NUMBER() OVER( PARTITION BY 시험번호 ORDER BY 이름 ) RN, 시험번호, 이름, 점수, 반 FROM (
SELECT '0001' 시험번호, '김말자' 이름, '90' 점수, '개나리반' 반 FROM DUAL UNION ALL
SELECT '0001', '김덕순', '90', '진달래반' FROM DUAL UNION ALL
SELECT '0002', '박영희', '70', '개나리반' FROM DUAL UNION ALL
SELECT '0003', '김영은', '80', '장미반' FROM DUAL UNION ALL
SELECT '0003', '이예은', '80', '국화반' FROM DUAL UNION ALL
SELECT '0003', '장지혜', '80', '개나리반' FROM DUAL
)
) WHERE RN = 1

by 마농 [2007.11.28 00:00:00]
1등을 뽑을때 어떤식으로 뽑았죠?
점수를 기준으로 뽑았다면 뽑는 기준을 점수, 이름으로 뽑으면 되지요.

by 채용근 [2007.11.28 00:00:00]
최고 득점자에서 ORDER BY 라면

ROW_NUMBER() OVER( PARTITION BY 시험번호 ORDER BY 점수 DESC, 이름 )

by 송미진 [2007.11.28 00:00:00]
감사합니당!!!

by 권용학 [2007.11.28 00:00:00]
select *
from result
where (시험번호, 이름) in
(
select 시험번호,MIN(이름) 이름
from result
group by 시험번호
)

전 보통 이렇게 하는데 쿼리성능은 잘 모르겠어요~ 요즘 한참 배우고 있는 초보자라^^;;

by finecomp [2007.11.28 00:00:00]
성능이 어떨 지 감잡기 힘든 경우,
특별한 몇몇 경우를 제외하고 대부분의 일반적인 경우는 동일한 테이블을 여러번 access하는 것 보다는 한번만 access하게 SQL을 구성하는 것이 성능에 좋을 확률이 더 높습니다.

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