我有一些表格,其中包含有关玩家的数据以及他们在联赛期间在保龄球中心击球的比赛数据。这个特定的查询用于排序今年男性和女性的前X平均数。我把所有这一切都放下了,但是在某些特定情况下,当一些球员在多个联赛中打球时,他们的平均数在顶部X中不止一个。在SQL查询中获得每个不同记录的最大平均值
显然,我只想列出最好的所以如果玩家A在ABC联盟中拥有200的最佳平均水平,并且在联盟DEF中拥有198的第二高平均水平,那么我只想要200名玩家。
下面是我想要更改的查询的简化版本,因为现在我必须手动删除重复项,或者我必须用另一种语言编写分拣机,但我宁愿在纯SQL中执行。 (I仅除去从查询这个例子不相关的信息):
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(和其他列,其在本例中不需要)。
WHERE
是为了确保游戏是在本赛季进行的,并且得分为正(-1表示人在缺席时)。我按赛季,球员ID和联盟名称对所有内容进行了分组,所以我得到了每名球员的平均PER LEAGUE,而不是不同联赛中所有比赛的平均水平。
我尝试使用DISTINCT
关键字,但这不起作用,因为我不能仅将DISTINCT
用于单列。我也试过其他的东西,但他们都没有接近工作,所以我想知道是否有可能做到这一点,或者如果我不得不求助于使用另一种语言排序这个结果集和删除重复?
非常好,这是我的首选答案,因为它在单个查询中工作而不需要临时表。万分感谢! – 2012-03-16 17:01:57