最大値だけでなく、最大値を持つ行数を返す 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 JOINすることでこれを正しく行うことができますが、無駄に思えます
--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 のように正しい結果を返す方法はありますか?
Microsoft SQL Server 2000
編集:これを入力する最初の試みで、上記の2つの重要なGROUP BYを見逃しました。追加しました 編集:Cade Rouxが書いたバージョンが私が書いたものであるふりをします