表:
Name | Value | Prize
Race1 32 5
Race1 22 5
Race1 30 5
Race2 11 5
Race2 12 5
Race2 31 5
我要查询的内容,当我定义Value
20+时,将根据Value
更高的结果选择UNIQUE比赛(Race1,Race2)到我的结果。奖金应该总结。
所以当我做metaquery时:select sum(Prize) biggestValueUniqueRaces where value > -20
我明白了:
查询返回:
Prize
10
考虑到这两行:
Name | Value | Prize
Race1 32 5
Race2 31 5
答案 0 :(得分:2)
首先必须确定所有种族,其值等于具有相同名称的种族的最大值。
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,但我不认为这种情况/查询会出现问题。)
答案 1 :(得分:1)
编辑重新评论
SELECT Sum(Races.Prize) As Total
FROM Races INNER JOIN (SELECT r.[Name], Max(r.[Value]) AS MaxOfValue
FROM Races r WHERE [Value]>20
GROUP BY r.[Name]) AS q
ON (Races.Value = q.MaxOfValue) AND (Races.Name = q.Name);
或
SELECT SUM(races.prize) AS SP
FROM races
WHERE races.id IN (
SELECT id
FROM races r
WHERE r.name = races.name
AND VALUE = (
SELECT Max(VALUE)
FROM races s
WHERE s.[name] = r.name
AND VALUE > 20 ))