2013-01-13 41 views
2

表:基于SQL的选择独特的价值

Name | Value | Prize 
Race1 32  5 
Race1 22  5 
Race1 30  5 
Race2 11  5 
Race2 12  5 
Race2 31  5 

我想要的查询,当我定义Value 20+,独特的种族(Race1,RACE2)将被选中我的结果的基础上,其Value更高。应该总结奖金。

所以,当我做metaquery:select sum(Prize) biggestValueUniqueRaces where value > -20 我得到:

查询返回:

Prize 
    10 

凡考虑到这2行:

Name | Value | Prize 
Race1 32  5 
Race2 31  5 
+0

对于同一个种族,价值中是否有重复值? –

+0

是的。发生的可能性很低,但仍可能发生。当发生这种情况时,它无关紧要。 – Jaanus

+0

@Remou我还没有在这里看到任何答案。甚至不是你的。 – Jaanus

回答

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)) 
+0

你确定它不返回例如这呢? 'Race1 22 5'。什么保证第一个查询返回最大的值? – Jaanus

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,但我认为这不会成为这种情况/查询的问题)。

+0

MS Access它说。 – Fionnuala

+0

这就是为什么我添加了评论。此查询中没有任何部分,我知道这些部分在MS Access中不可用。 – Jacco

+0

DECLARE @minimum int = 20不可用。 – Fionnuala