如何在 sql 中显示 2 个联赛的最高平均值?

问题描述 投票:0回答:1

我试图在我的表格中的 2 个联赛中展示最好的击球手(最高击球率)。不幸的是,我只得到最高的平均水平。更具体地说,我希望结果显示第一个联赛的名称、该联赛中击球率最高的运动员及其击球率。然后我想让第二个联赛与那个联赛中击球率最高的运动员一起,然后是他们的击球率。

这是我的代码:

SELECT teamLeague, athleteFirstName, athleteLastName, athleteBattingAvg AS 'Athlete Batting Average'

FROM team FULL JOIN athlete ON athlete.teamId = team.teamId

WHERE athleteBattingAvg = 
                    (SELECT MAX(athleteBattingAvg)
                    FROM athlete)

GROUP BY teamLeague, athleteFirstName, athleteLastName, athleteBattingAvg;

我知道我必须遗漏一些东西才能获得总体平均水平,而只是在各自的联赛中获得最高分,但我不知道是什么。

mysql sql max average
1个回答
0
投票

假设 MySQL 8 或更高版本:

SELECT
      teamLeague
    , athleteFirstName
    , athleteLastName
    , athleteBattingAvg  AS 'Athlete Batting Average'
FROM (
    SELECT
          teamLeague
        , athleteFirstName
        , athleteLastName
        , athleteBattingAvg 
        , row_number() OVER(partition by teamLeague ORDER BY athleteBattingAvg DESC) AS RN
    FROM team
    FULL JOIN athlete ON athlete.teamId = team.teamId
    ) AS D
WHERE RN = 1
 

不能保证一个联赛的平均击球率等于所有联赛的最高击球率,因此您当前的 where 子句是有问题的,最好避免。而是使用

ROW_NUMBER()
将值 1 分配给每个联赛中的最高安打率(注意使用的“分区”实现了这一点)。

另一个注意事项是,如果有相同最高安打率的球员,那么您可以使用

DENSE_RANK()
而不是 row_number,这将允许返回多个排名为 1 的球员。

© www.soinside.com 2019 - 2024. All rights reserved.