Мой учитель базы данных попросил меня написать (на сервере Oracle) запрос: выберите идентификатор_группы с наибольшим количеством очков в среднем за год 2010Oracle ORDER BY с ROWNUM или HAVING> = ALL
я писал:
SELECT * FROM (
SELECT groupid, AVG(score) average FROM points
WHERE yr = 2010
AND score IS NOT NULL
GROUP BY groupid
ORDER BY average DESC
) WHERE rownum = 1;
Мой учитель говорит мне, что этот запрос «лучше»:
SELECT groupid, AVG(score) average FROM points
WHERE yr = 2010
GROUP BY groupid
HAVING AVG(score) >= ALL (
SELECT AVG(score) FROM points
WHERE yr = 2010
GROUP BY groupid
);
Какой самый быстрый/лучше? Есть ли еще лучшее решение (только для Oracle)? Спасибо.
Спасибо. В самом деле, у меня нет «набора кортежей». Но образовательный путь рядом с режимом исполнения не для меня, действительно интересный.Для точки переносимости это абсолютно верно. Я бы предпочел использовать LIMIT внутри rownum, который тоже не переносится, я знаю. С другой стороны, мы также изучаем специальный код Oracle ... – Maxux