В моей таблице "game_info" у меня есть
ID | player_1 | player_2 | score
--------------------------------
1 | John | Rick | 100
2 | Joe | John | 80
3 | Bob | Rick | 210
Я хочу суммировать общий балл для каждого игрока независимо от того, являются ли они player_1 или player_2, и заказывать по результату.
Я ожидаю:
Name | Score
------------
Rick | 310
Bob | 210
John | 180
Joe | 80
Я пытался подключиться к UNION, но я не могу понять это правильно.
Есть ли способ сделать это в sql или я должен перепроектировать мою таблицу?
Благодарю вас!
Вы можете сделать это с помощью union all
и group by
:
select player, sum(score)
from ((select player1 as player, score from game_info
) union all
(select player2 as player, score from game_info
)
) p
group by player
order by sum(score) desc;
SELECT player, SUM(score)
FROM
(SELECT player_1 AS player, score
FROM t
UNION ALL
SELECT player_2 as player, score
FROM t) sub
GROUP BY player
Вы должны объединить результаты игрока 1 с результатами игрока 2, чтобы у вас был один результат с просто игроком и счетом. Конечно, баллы будут перечислены дважды в этом представлении, по одному для каждого игрока. В моем запросе результат называется sub. Основываясь на sub, вы можете группировать игроком и суммировать свои баллы.