最初に、値が同じ名前のレースの最大値と等しいすべてのレースを決定する必要があります。
SELECT
[r1].[Name],
[r1].[Value],
[r1].[Prize]
FROM [Races] [r1]
WHERE [r1].[Value] > 20
AND [r1].[Value] =
(SELECT MAX([r2].[Value])
FROM [Races] [r2]
WHERE [r2].[Name] = [r1].[Name])
これにより、複数の種族に同じ名前、値、および賞金が与えられる可能性があります。したがって、それらをグループ化します。
SELECT
[r1].[Name],
[r1].[Value],
[r1].[Prize]
FROM [Races] [r1]
WHERE [r1].[Value] > 20
AND [r1].[Value] =
(SELECT MAX([r2].[Value])
FROM [Races] [r2]
WHERE [r2].[Name] = [r1].[Name])
GROUP BY
[r1].[Name],
[r1].[Value],
[r1].[Prize]
そして、賞品を合計します。
SELECT
SUM([sub].[Prize]) AS [TotalPrizes],
COUNT(*) AS [NumberOfRaces]
FROM
(
SELECT
[r1].[Name],
[r1].[Value],
[r1].[Prize]
FROM [Races] [r1]
WHERE [r1].[Value] > 20
AND [r1].[Value] =
(SELECT MAX([r2].[Value])
FROM [Races] [r2]
WHERE [r2].[Name] = [r1].[Name])
GROUP BY
[r1].[Name],
[r1].[Value],
[r1].[Prize]
) AS [sub]
ここに Fiddle があります。(サーバーの種類を MS SQL 2008 に設定しましたが、このケース/クエリでは問題になるとは思いません)。