Mysql 一个有趣的SQL查询挑战-列出每个运动员前3名得分的平均值

Mysql 一个有趣的SQL查询挑战-列出每个运动员前3名得分的平均值,mysql,database,Mysql,Database,上述查询应按预期工作 上述查询应按预期工作。假设运动员和记录的组合是唯一的 SELECT ath_id , ROUND(AVG(record),2) top3_avg FROM ( SELECT x.* FROM athletes x JOIN athletes y ON y.ath_id = x.ath_id AND y.record >= x.record

上述查询应按预期工作


上述查询应按预期工作。

假设运动员和记录的组合是唯一的

SELECT ath_id
     , ROUND(AVG(record),2) top3_avg 
  FROM 
     ( SELECT x.* 
         FROM athletes x 
         JOIN athletes y 
           ON y.ath_id = x.ath_id 
          AND y.record >= x.record 
        GROUP 
           BY x.id 
       HAVING COUNT(*) <=3
     ) a 
 GROUP 
    BY ath_id;

假设运动员和记录的组合是唯一的

SELECT ath_id
     , ROUND(AVG(record),2) top3_avg 
  FROM 
     ( SELECT x.* 
         FROM athletes x 
         JOIN athletes y 
           ON y.ath_id = x.ath_id 
          AND y.record >= x.record 
        GROUP 
           BY x.id 
       HAVING COUNT(*) <=3
     ) a 
 GROUP 
    BY ath_id;

一些关键字供您搜索:分组依据、聚合函数、限制和排序依据。我知道这些分组依据、平均值、限制、排序依据,但不起作用。MySQL查询语句中是否有实用可行的解决方案?比“有趣”更“普通”一些关键字供您搜索:分组依据、聚合函数、限制和排序依据。我知道这些分组依据、平均值、限制、排序依据,但不起作用。MySQL查询语句中有没有实用可行的解决方案?比“有趣”更“普通”的哈希尔先生,太棒了,你是我的英雄!我只是想知道你作为db管理员或db用户作为应用程序开发人员工作了多少年?你真是太好了,但老实说,我现在只是个新手。2017年完成的大师。顺便说一句,你应该接受它作为答案,并投票表决,以便对未来的参观者有所帮助。哦,一个新的完成的大师,有希望!我把它投了更高的票,不是吗?如果没有,请告诉我如何做:-您可能已经投了较高的票,但不会显示/计算,因为您没有足够的声誉15投较高的票。因此,首先接受它作为答案,然后投票表决。哈希尔,太棒了,你是我的英雄!我只是想知道你作为db管理员或db用户作为应用程序开发人员工作了多少年?你真是太好了,但老实说,我现在只是个新手。2017年完成的大师。顺便说一句,你应该接受它作为答案,并投票表决,以便对未来的参观者有所帮助。哦,一个新的完成的大师,有希望!我把它投了更高的票,不是吗?如果没有,请告诉我如何做:-您可能已经投了较高的票,但不会显示/计算,因为您没有足够的声誉15投较高的票。因此,首先接受它作为答案,然后投票表决。
SELECT ath_id
     , ROUND(AVG(record),2) top3_avg 
  FROM 
     ( SELECT x.* 
         FROM athletes x 
         JOIN athletes y 
           ON y.ath_id = x.ath_id 
          AND y.record >= x.record 
        GROUP 
           BY x.id 
       HAVING COUNT(*) <=3
     ) a 
 GROUP 
    BY ath_id;