3

レースチャンピオンシップの結果を保存するMySQLテーブルがあるので、すべての行に、他のデータの中でも、特定のレースでのすべてのドライバーの位置が含まれます。特定のドライバーの上位5位の合計を取得したい(たとえば、ドライバーの最高の位置が1、2、2、4、5の場合、MySQLに14を返したい)。私がやろうとしていることはこれです:

SELECT driver, SUM(position)
FROM results
WHERE (race, season, position) IN
   (SELECT race, season, position
    FROM results
    WHERE driver = "Vettel"
    ORDER BY position ASC
    LIMIT 5) 
AND driver = "Vettel"

もちろん、(レース、シーズン、ポジション)が「結果」テーブルの主キーです。さて、問題は、MySQLが内部サブクエリでのLIMITの使用をまだサポートしていないため、これを実際に機能させることができないことです。これをどのように行いますか?

そして、追加のクレジットとして、単一のドライバーの代わりに、単一のクエリですべてのドライバーの上位5つの結果の合計を取得する方法はありますか?

4

2 に答える 2

3

これを試して:

SELECT driver, SUM(`position`)
FROM (SELECT driver, race, season, `position`, 
             IF(@lastDriver=(@lastDriver:=driver), @auto:=@auto+1, @auto:=1) indx 
      FROM results, (SELECT @lastDriver:=0, @auto:=1) A 
      ORDER BY driver, `position`) AS A  
WHERE indx <= 5 
GROUP BY driver ;
于 2013-01-12T14:04:41.367 に答える
2

別の方法があります...

SELECT a.season
     , a.driver
     , SUM(points) T5
  FROM
     ( SELECT x.season
            , x.driver
            , x.points
         FROM results x 
         JOIN results y 
           ON (y.season = x.season 
          AND y.driver = x.driver) 
          AND (y.position < x.position OR (y.position = x.position AND y.race < x.race))
        GROUP 
           BY x.season
            , x.driver
            , x.race
       HAVING COUNT(*) <=5
     ) a
 GROUP
    BY season
     , driver;
于 2013-01-12T14:49:32.767 に答える