Я пытаюсь помочь приятелю с «простым» веб-сайтом для его группы гольфа. База данных, которую я пытаюсь использовать, сохранит все баллы игроков за каждый завершенный раунд. Есть также два типа игр, которые будут воспроизводиться и храниться. Пример ниже:Mysql select top N баллов за группу ДЛЯ КАЖДОГО пользователя
ID Game Type Score
1 a 12
1 a 12
1 a 1
1 a 15
1 a 15
1 b 12
1 b 5
1 b 10
1 b 12
1 b 5
1 b 10
2 a 6
2 a 9
2 a 1
2 a 3
2 a 2
2 b 8
2 b 10
2 b 15
2 b 3
2 b 12
То, что я пытаюсь сделать это, выберите верхнюю 3 оценку типа игры для каждого пользователя и выбрать верхние 2 оценок от типа игр B для каждого пользователя. Что мне нужно ВЫБРАТЬ, чтобы получить таким образом я могу затем суммировать баллы для каждого игрока:
ID Game Type Score
1 a 12
1 a 15
1 a 15
1 b 12
1 b 12
2 a 6
2 a 9
2 a 3
2 b 15
2 b 12
я нашел подобный вопрос и решение от bonCodigo на Select highest 3 scores in each day for every user. Я изменил свой SQL к этому:
-- for top 2 sum by user by each day
SELECT userid, sum(score), type
FROM scores t1
where 3 >=
(SELECT count(*)
from scores t2
where t1.score <= t2.score
and t1.userid = t2.userid
and t1.type = t2.type
order by t2.score desc)
group by userid, type
;
-- for all two days top 2 sum by user
SELECT userid, sum(score)
FROM scores t1
where 3 >=
(SELECT count(*)
from scores t2
where t1.score <= t2.score
and t1.userid = t2.userid
and t1.type = t2.type
order by t2.score desc)
group by userid
;
Проблема, которую я имею, что если я хочу, чтобы первые 3 баллов, а 3-й и 4-й баллы равны, то он не вернется 3-й высокий балл; только два лучших. Прикрепленный файл sqlfiddle, который я пытался использовать. Любая помощь в том, как заставить его использовать верхнюю 3, независимо от того, все они равны или нет! Благодаря!
MySQL это дерьмо для этого вы могли бы быть лучше всего делать это в приложении. –
Спасибо. Это будет иметь в виду. Я нашел очень близкое решение, но это просто немного. Я отредактировал свой вопрос, чтобы подумать. Я не могу комментировать другой ответ bc, я просто noob! Надеюсь, кто-то сможет ответить на это! –
хорошо .. там вы идете. в основном это сложно, потому что mysql не поддерживает 'limit' в коррелированном подзапросе, иначе было бы относительно просто –