2

テーブル:

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

クエリしたいのは、20+ を定義すると、どちらが高いValueかに基づいて、UNIQUE レース (Race1、Race2) が結果に選択されValueます。そして、賞金を合計する必要があります。

したがって、メタクエリを実行すると、次のようselect sum(Prize) biggestValueUniqueRaces where value > -20 になります。

クエリの戻り値:

Prize
  10

これらの2行を考慮した場合:

Name | Value | Prize
Race1   32      5
Race2   31      5
4

2 に答える 2

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]

ここに Fiddle があります。(サーバーの種類を MS SQL 2008 に設定しましたが、このケース/クエリでは問題になるとは思いません)。

于 2013-01-13T19:23:26.053 に答える
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 ))
于 2013-01-13T18:02:05.660 に答える