2012-05-14 5 views
0

У меня есть таблица с именем игра:SqL суммировать разные строки

id player_a_id player_b_id player_a_result player_b_result turn 
1  1   2    1     0    1 
2  3   4    1     0    1 
3  1   3    1     0    2 

Я пытаюсь написать SQL запрос, который будет составить список рейтинговой таблицы. Пример:

player_id total score 
    1   2 
    2   0 
    3   1 
    4   0 

Я не уверен, как написать sql. Некоторая помощь была бы замечательной!

+0

Просто любопытно - это домашнее задание? –

+0

Да, это: D ___ –

+0

Добро пожаловать в StackOverflow: если вы отправляете код, XML или образцы данных **, пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на редактор панель инструментов, чтобы красиво формат и синтаксис выделить его! Никаких беспорядочных '
' оргий тоже необходимо! –

ответ

1
SELECT player_id, SUM(result) 
FROM 
(SELECT player_a_id AS player_id, player_a_result AS result FROM games 
UNION 
SELECT player_b_id, player_b_result FROM games) AS u 
GROUP BY player_id 
ORDER BY player_id 

Это то, что я предполагаю, что вы после. Это создает подзапрос (материал в parens()), который комбинирует (UNION) игроков a и b в один набор, затем группирует по игроку и суммирует результаты.

+0

В производной таблице вам нужно сделать этот 'union' в' union all'. В противном случае дубликаты строк удаляются, поэтому игрок 1 выигрывает только одну игру, хотя выиграл два. –

+0

Это выглядит продвинутым ^^ Я попытался использовать sql в Oracle, но у меня есть сообщение об ошибке: «AS u». –

+0

Я удалил «AS u», и теперь он показывает каждому игроку с их суммарным количеством игр. Вау, спасибо. –

0

Хм .. как вы хотите получить rank_score SUM? Я имею в виду, какие числа/столбцы вы хотите использовать SUM? Если вам нужно просуммировать значения из одной и той же колонке, например:

стол пример:

`id` `player_id` `number` 
1  1   1 
2  2   15 
3  1   20 

Ожидаемый результат:

`player_id` sum(`number`) 
1   21 
2   15 

Вы можете просто использовать это:

SELECT player_id, SUM(`number`) FROM `table` GROUP BY player_id 

SUM будет считать результат для всех строк, GROUP BY необходимо разделить общую сумму на player_id. Если вам нужно получить сумму разных столбцов, необходимо подготовить процедуру.

+0

Да, что-то в этом роде, но я хочу окунуться в результаты обоих игроков a's и b's. Кажется, это сложная часть. –

Смежные вопросы