我有一些表格,其中包含有关本赛季在联赛期间在保龄球馆打球的球员和比赛的数据。此特定查询的用途是对今年男性和女性的X平均值进行排序。我把所有这些都记下来了,但是在某些情况下,当某些球员参加多个联赛并且在前十名中拥有超过一个平均值的时候,我仍然有一个问题。
显然,我只想列出给定玩家的最佳平均数,因此,如果玩家A在联赛ABC中拥有200的最佳平均数,在联赛DEF中具有198的第二最佳平均数,我只希望列出200。
这是我想更改的查询的简化版本,因为现在我必须手动删除重复项,或者必须用另一种语言编写分类器,但是我宁愿用纯SQL来完成。(对于该示例,我仅从查询中删除了不相关的信息):
SELECT playerId, ROUND(AVG(score),2)Average, season, leagueName, COUNT(score)NumGames FROM Scores WHERE season = '2011-2012' AND score > -1 GROUP BY season, playerID, leagueName ORDER BY Average DESC LIMIT 0,30
基本上,该Scores表包含每个单独的游戏,playerId,玩游戏的季节以及LeagueName(以及此示例中不需要的其他列)。
Scores
这WHERE是为了确保比赛在本赛季进行,并且得分为正(-1表示缺席时的得分)。我按赛季,玩家ID和联赛名称对所有内容进行分组,因此我获得了每个玩家的平均联赛数据,而不是不同联赛中所有比赛的平均值。
WHERE
我尝试使用该DISTINCT关键字,但这不起作用,因为我不能DISTINCT仅将其用于单个列。我也尝试了其他方法,但没有一个方法甚至无法工作,所以我想知道是否有可能做到这一点,或者是否必须使用另一种语言对结果集进行排序并删除重复项?
DISTINCT
您可以在子查询中计算每个联赛每个球员的平均水平:
select playerId , max(league_avg.score) from ( select playerId , avg(score) as score from Scores where season = '2011-2012' and score > -1 group by playerId , leagueName ) as league_avg group by playerId