SQL ORDER BY в подзапросе IN не возвращает результатов

Я использую SQL (движок базы данных H2 версии 1.4.181) и пытаюсь суммировать 5 лучших баллов, которые есть у студента. Таблица РЕЗУЛЬТАТЫ включает в себя идентификатор студента, идентификатор события и баллы. Каждый студент может участвовать в мероприятии только один раз. Следующий подзапрос — это то, что я пытаюсь использовать для студента с идентификатором 5.

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

Однако этот запрос возвращает значение null. Я обнаружил, что если удалить ORDER BY points DESC, остальная часть запроса работает. Кто-нибудь знает, как включить ORDER BY или почему он не работает?

Спасибо


person Jess    schedule 08.10.2014    source источник
comment
Какую систему баз данных вы используете и какую ее версию?   -  person Damien_The_Unbeliever    schedule 08.10.2014
comment
В столбце point есть нули?   -  person ypercubeᵀᴹ    schedule 08.10.2014


Ответы (3)


Это похоже на ошибку в H2. Вы можете использовать объединение. Полный тестовый пример:

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;
person Thomas Mueller    schedule 08.10.2014

попробуйте использовать соединение, вы можете использовать sql, как показано ниже.

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;
person ETL_Devs    schedule 08.10.2014
comment
Я получаю: Syntax error in SQL statement "SELECT SUM(X.POINTS) FROM (SELECT POINTS , EVENTID 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 = 32179 "; [42000-181] 42000/42000 - person Jess; 08.10.2014

Оказывается, мне вообще не нужен был IN-запрос. Следующее работало отлично:

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