我想编写一个 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 JOINing 子查询来正确地做到这一点,但这似乎很浪费
--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 一样的正确结果?
微软 SQL 服务器 2000
编辑:我在第一次尝试输入时错过了上面两个重要的 GROUP BY,我添加了它们 编辑:假装 Cade Roux 写的版本是我写的