2014-10-08 6 views
0

SQL (H2 데이터베이스 엔진 버전 1.4.181)을 사용 중이며 학생이 가진 상위 5 점을 합산하려고합니다. RESULTS 테이블에는 studentID, eventID 및 points가 포함됩니다. 각 학생은 한 번만 이벤트에 참가할 수 있습니다. 다음 하위 쿼리 내가이 쿼리가 null의 반환과 학생이 작업을 수행하기 위해 사용하려고 시도하고 그러나 5IN 부속 조회의 SQL ORDER BY가 결과를 리턴하지 않습니다.

SELECT SUM(points) FROM RESULTS 
    WHERE eventID IN 
     (SELECT TOP 5 eventID FROM RESULTS 
      WHERE studentID = 5 ORDER BY points DESC) 
     AND studentID = 5; 

의 ID입니다 것입니다. 나는 ORDER BY points DESC이 제거되면 나머지 쿼리가 작동 함을 발견했다. 누구든지 ORDER BY를 통합하는 방법을 알고 있습니까? 아니면 작동하지 않는 이유는 무엇입니까?

감사

+1

어떤 데이터베이스 시스템을 사용하고 있으며 어떤 버전입니까? –

+0

'point' 열에 null이 있습니까? 내가 –

답변

0

, 당신은이 belw

select sum(x.points) from 
(select points , event_id from RESULTS) X 
(select eventID from 
(SELECT eventID, row_number() over (partition by points ORDER BY points DESC) tops FROM RESULTS) X 
where tops<6) Y 
where X.eventID=y.eventID 
and X.studentID = 5; 
+1

받고 있어요 : '구문 오류 SQL 문에서 "ROW_NUMBER() OVER (EVENTID을 선택합니다 ( 로부터 X ([*] SELECT EVENTID을 (결과에서, EVENTID 포인트를 선택) FROM SUM (X.POINTS)를 선택 점수에 의한 분할 점 DESC에 의한 결과) X 어디에서 TOPS <6) Y X.EVENTID = Y.EVENTID AND X.STUDENTID = 32179 "; [42000-181] 42000/42000' – Jess

2

이 H2의 버그처럼 보이는 같은 SQL을 사용하여 조인을 사용하십시오. 조인을 사용할 수 있습니다. 완전한 테스트 케이스 :

create table results(eventId int, points int, studentId int); 
insert into results values(1, 10, 1), (2, 20, 1), (3, 5, 1); 
insert into results values(1, 10, 2), (2, 20, 2), (3, 5, 2); 
insert into results values(1, 10, 3), (2, 20, 3), (3, 5, 3); 

SELECT SUM(r.points) FROM RESULTS r, 
(SELECT eventID FROM RESULTS 
    WHERE studentID = 2 
    ORDER BY points DESC 
    LIMIT 2) r2 
WHERE r2.eventID = r.eventId 
AND studentID = 2; 
0

나는 IN 쿼리를 전혀 필요로하지 않는다. 다음은 완벽하게 작동했습니다 :

SELECT SUM(points) FROM 
    (SELECT TOP 5 points FROM RESULTS 
     WHERE studentID = 5 
     ORDER BY points DESC);