我希望以下查询仅选择特定年份的结果。 eventID 与事件日期所在的事件表相关。
冠军排行榜表
------------------------------------
| ID | eventID | playerId | points |
------------------------------------
事件表
------------------
| eventID | date |
------------------
我不知道在哪里放置内部联接,以便我可以正确引用事件日期
SELECT playerId, SUM(points) top5
FROM
( SELECT x.*
, CASE WHEN @prev = playerId THEN @i:=@i+1 ELSE @i:=1 END i
, @prev:=playerId
FROM championshipLeaderboard x
, (SELECT @prev:=null,@i:=0) vars ORDER BY playerId,points
DESC) a
WHERE i<=5 AND playerId = 1 AND YEAR(events.date) = YEAR(CURDATE())
GROUP BY playerId
ORDER BY top5 DESC
参见数据库 fiddle here
最佳答案
经过一番讨论(见评论)我想出了这个:
SELECT top5.playerId, SUM(top5.points) AS sumOfPoints
FROM (
SELECT playerId, points
FROM championshipLeaderboard
INNER JOIN events ON championshipLeaderboard.eventID = events.eventID
WHERE playerId = 1
AND YEAR(events.date) = YEAR(CURDATE())
ORDER BY points DESC
LIMIT 5
) AS top5
GROUP BY top5.playerId
关于mysql - 选择指定年份的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537632/