Подзапросы SQL и RANK () - PullRequest
0 голосов
/ 17 мая 2018

Я использую ниже для системы турниров.Таблица содержит зарегистрированные длины для всех команд.Результатом будет табло, суммирующее длину всех команд в totalScore.

Я пытаюсь включить функцию RANK () в свой SQL, но я застрял прямо сейчас.Я хочу получить текущий рейтинг команд из моей базы данных.У кого-нибудь есть идеи?Я использую MariaDB.

    select team, sum(length) as totalScore
from
   (SELECT t.*,
       @num_in_group:=case when @team!=team then @num_in_group:=0 else @num_in_group:=@num_in_group+1 end as num_in_group,
       @team:=team as t
    FROM reg_catches t, (select @team:=-1, @num_in_group:=0) init
    ORDER BY team asc, length desc) sub
WHERE sub.num_in_group<=4
GROUP BY team
ORDER BY totalScore DESC;

Таблица

team length
-----------
26   70
25   70
25   95
25   98
25   100
25   100
25   100
25   122

Токовый выход

team    totalScore
--      --
25      520
26      70

Требуемый выход

rank    team    totalScore
--      --      --
1       25      520
2       26      70

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Теперь с помощью вышеупомянутой помощи от Диксона, теперь проблема в том, что рейтинг основывается на идентификаторе команды, а не на totalScore: O

SET @row = 0;
SELECT @row:=@row + 1 rank, team, sum(length) as totalScore
from
   (SELECT t.*,
       @num_in_group:=case when @team!=team then @num_in_group:=0 else @num_in_group:=@num_in_group+1 end as num_in_group,
       @team:=team as t
    FROM reg_catches t, (select @team:=-1, @num_in_group:=0) init
    ORDER BY team asc, length desc) sub
WHERE sub.num_in_group<=4 and competition = "#COMPID" and disqualified = 0
GROUP BY team
ORDER BY totalScore DESC

Токовый выход

rank    team    totalScore
1   28381   479
58  28468   439
20  28412   436
25  28419   432
14  28404   427
5   28388   421

Разыскивается будет

rank    team    totalScore
1   28381   479
2   28468   439
3   28412   436
4   28419   432
5   28404   427
6   28388   421

SQL Fiddle: http://sqlfiddle.com/#!9/107d98/2/1

0 голосов
/ 17 мая 2018
SET @row = 0;
SELECT @row:=@row + 1 rank, a.team, a.total_score 
FROM(SELECT team, sum(r.length) as total_score FROM reg_catches r GROUP BY 
r.team) a;

Попробуйте выше

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