Я хочу написать запрос T-SQL, который возвращает не только максимальное значение, но и количество строк, имеющих максимальное значение. Должен быть лучший способ, чем я придумал
--wrong way
select LibraryBranchId, max(daysCheckedOut), count(daysCheckedOut)
from books group by LibraryBranchId
LibraryBranchId Expr1 Expr2
----------------------------------
1 100 398503 (WRONG!)
2 75 94303 (WRONG!)
3 120 103950 (WRONG!)
Я могу сделать это правильно, подключившись к подзапросу INNER, но это кажется расточительным
--right way, but seems WAY too long
select LibraryBranchId,max(daysCheckedOut),count(daysCheckedOut)
from books inner join
( select LibraryBranchId, max(daysCheckedOut) as maxDaysCheckedOut
from books group by LibraryBranchId ) as maxbooks
on books.LibraryBranchId=maxbooks.LibraryBranchId
where daysCheckedOut=maxDaysCheckedOut
group by LibraryBranchId
LibraryBranchId Expr1 Expr2
----------------------------------
1 100 17 (RIGHT!)
2 75 11 (RIGHT!)
3 120 2 (RIGHT!)
Так есть ли такой простой способ, как запрос № 1, но который возвращает правильный результат, как в запросе № 2?
MS SQL Server 2000
РЕДАКТИРОВАТЬ: я пропустил два важных GROUP BY выше с моей первой попытки войти в это, я добавил их
РЕДАКТИРОВАТЬ: Притворись, что версия, которую написал Cade Roux, это то, что я написал