2014-02-02 2 views
1

Скажем, у меня есть основания с таблицей:SQL Finding максимальное значение без верхней команды

-courses (key: name [ofthecourse], other attributes: year in which the course takes place) 

Я хочу, чтобы завершить запрос ищет ответ на вопрос:

На какой год обучения существует максимальное количество курсов?

Обычно запрос будет:

SELECT TOP 1 STUDYEAR 
FROM COURSES 
GROUP BY STUDYEAR 
ORDER BY COUNT(CNO) DESC; 

Но мой вопрос, который запрос может выполнить это без использования TOP 1 фразы?

+0

Что RDBMS вы используете? – Mureinik

+0

Im using SQL Server – Simon

ответ

2

Вы можете использовать внутренний запрос для получения максимального количества. Единственное отличие состоит в том, что он может вернуть более одной записи, если у них одинаковый счет.

SELECT STUDYEAR 
FROM COURSES 
GROUP BY STUDYEAR 
HAVING COUNT(CNO) = (SELECT MAX(CNOCount) FROM 
     (SELECT COUNT(CNO) CNOCount 
     FROM COURSES 
     GROUP BY STUDYEAR) X) 

Другой вариант с только один внутренний запрос:

SELECT STUDYEAR 
FROM 
    (SELECT STUDYEAR, ROW_NUMBER() OVER (ORDER BY COUNT(CNO) DESC) RowNumber 
    FROM COURSES 
    GROUP BY STUDYEAR) X 
WHERE RowNumber = 1 
+1

Да, это был момент, спасибо :) – Simon

+0

Невозможно выполнить агрегированную функцию для выражения, содержащего агрегат или подзапрос. это ошибка. sql server подходит :( – Simon

+0

@Simon Пожалуйста, см. мой обновленный ответ. – Szymon

Смежные вопросы