2016-05-07 6 views
-2

сказать, что у меня есть sql, который в настоящее время возвращает всех футболистов, которые играли в течение всех лет. Как так:Как сгруппировать два поля в SQL?

name  year  goals 
john  2010  1 
john  2006  2 
john  2006  8 
fred  2006  1 

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

name  year  goals 
john  2010  1 
john  2006  10  <--- This is compressed, but there are still 2 johns 
fred  2006  1    since they are from different years 

что у меня есть сделал это до сих пор.

(select name, year, goals 
from table) as T 

Если я просто

select * 
from 
    (select name, year, goals 
    from table) as T 
group by year; 

Фред исчезнет, ​​но если я «группу по имени», есть только один джон налево. Любая помощь?

ответ

6
select name, year, sum(goals) as totalgoals 
from table 
group by name, year 
+0

будет «группировать по имени, году», затем искать строки, которые имеют одинаковые поля «имя» и «год», а затем И ТОЛЬКО группируют их в один? Будет ли это означать, что, выполнив в приведенном выше примере «группа по имени, году, целям», возвращаемая таблица будет такой же, как и исходная таблица? – Webeng

+0

@Webeng Да, «группы» - это все строки с одинаковой комбинацией «имя-год». Если вы добавите цели, они вернут все строки с одинаковыми «целями года-года». Таким образом, в этом примере она вернет исходную таблицу, но если две строки были дублирующими (то есть две строки john-2010-1), они объединят их и просто показывают «john-2010-2» –

+0

, а я если порядок не имеет значения? – Webeng

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