我在那里我存储结果,从一个赛车冠军一个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名成绩每一位司机的总和与单个查询?
试试这个:
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 ;
这里的另一种方式...
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;