你得先确定所有的比赛,对于其值等于具有相同名称的比赛的最大值。
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]
Here is a Fiddle。 (我将服务器类型设置为MS SQL 2008,但我认为这不会成为这种情况/查询的问题)。
对于同一个种族,价值中是否有重复值? –
是的。发生的可能性很低,但仍可能发生。当发生这种情况时,它无关紧要。 – Jaanus
@Remou我还没有在这里看到任何答案。甚至不是你的。 – Jaanus