总结在MySQL前5位值(Sum top 5 values in MySQL)

2019-07-18 03:50发布

我在那里我存储结果,从一个赛车冠军一个MySQL表,让每一个行包含某一种族-among其他数据 - 每个驾驶员的位置。 我想获得一定的驾驶者的前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名成绩每一位司机的总和与单个查询?

Answer 1:

试试这个:

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 ;


Answer 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;


文章来源: Sum top 5 values in MySQL