У меня есть несколько таблиц, которые содержат данные об игроках и играх, которые они играли в этот сезон в боулинг-центре во время своих лиг. Этот конкретный запрос используется для сортировки лучших средних значений Х в этом году для мужчин и женщин. У меня есть все это, но у меня все еще есть проблема в каком-то конкретном случае, когда некоторые игроки играют в нескольких лигах и имеют более одного из своих средних в верхнем X.
Очевидно, я хочу перечислить только лучшее среднее значение для данного игрока, поэтому, если у игрока А есть лучшее среднее значение с 200 в Лиге ABC, а также второе лучшее среднее с 198 в Лиге DEF, я хочу только 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
содержит каждую отдельную игру, идентификатор игрока, сезон, в который игра была сыграна, и имя лиги (и другие столбцы, которые не требуются в этом примере).
WHERE
- убедиться, что игра была сыграна в этом сезоне, и что счет положительный (-1 для тех, кто отсутствует). Я группирую все по сезону, playerID и leagueName, так что я получаю среднее значение PER LEAGUE для каждого игрока вместо среднего значения всех игр, сыгранных в разных лигах.
Я попытался использовать ключевое слово DISTINCT
, но это не сработало, потому что я не могу использовать DISTINCT
только для одного столбца. Я также пробовал другие вещи, но ни одна из них даже близко не подошла к работе, поэтому мне интересно, можно ли вообще это сделать или мне придется прибегнуть к использованию другого языка для сортировки этого набора результатов и удаления дубликатов?