Как я могу набрать от AVG sql? - PullRequest
1 голос
/ 30 апреля 2020

У меня проблемы с получением рейтинга из одной строки, в которой есть некоторый uuid:

SELECT uuid , AVG(nodebuff+debuff+archer+builduhc+uhc+gapple)/6 as Average
from elo_ranked group by uuid
order by AVG(nodebuff+debuff+archer+builduhc+uhc+gapple)/6 desc
limit 3

Я указываю, что вышеуказанная функция работает и имеет ожидаемый результат.

1 Ответ

0 голосов
/ 30 апреля 2020

Это то, что вы хотите?

SELECT uuid, AVG(nodebuff+debuff+archer+builduhc+uhc+gapple)/6 as Average ,
       RANK() OVER (ORDER BY AVG(nodebuff+debuff+archer+builduhc+uhc+gapple)/6 DESC) as ranking
FROM elo_ranked 
GROUP BY uuid
ORDER BY AVG(nodebuff+debuff+archer+builduhc+uhc+gapple)/6 desc 
LIMIT 3;

РЕДАКТИРОВАТЬ:

Чтобы присвоить указанному c пользователю, используйте подзапрос:

SELECT u.*
FROM (SELECT uuid, AVG(nodebuff+debuff+archer+builduhc+uhc+gapple)/6 as Average ,
           RANK() OVER (ORDER BY AVG(nodebuff+debuff+archer+builduhc+uhc+gapple)/6 DESC) as ranking
      FROM elo_ranked 
      GROUP BY uuid
     ) u
WHERE uuid = ?;

Также, Я не уверен, что вам нужно объединение. Это будет необходимо, только если у пользователя будет несколько строк в таблице elo_ranked. Если не нужно, то вы должны использовать:

SELECT u.*
FROM (SELECT uuid, (nodebuff+debuff+archer+builduhc+uhc+gapple)/6 as Average ,
           RANK() OVER (ORDER BY (nodebuff+debuff+archer+builduhc+uhc+gapple)/6 DESC) as ranking
      FROM elo_ranked 
     ) u
WHERE uuid = ?;

У GROUP BY много накладных расходов, поэтому это должно быть быстрее (если MySQL не имеет сложных оптимизаций, чтобы избежать агрегирования при группировании по первичному ключ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...