2012-06-17 4 views
2

У меня есть эта таблица:значение группы из разных колонок и граф

UNIQUE_ID | WINNER_ID | FINALIST_ID 
________1 | ________1 | __________2 
________2 | ________1 | __________3 
________3 | ________3 | __________1 
________4 | ________1 | __________2 

И мне нужно список всех игроков (победители и финалисты) и подсчет, сколько раз они получили 1-е или 2-е места.

В этом случае было бы:

PLAYER_ID | WINNER_TIMES | FINALIST_TIMES 
________1 | ___________3 | _____________1 
________2 | ___________0 | _____________2 
________3 | ___________1 | _____________1 

Подобный вопрос уже задавал здесь (LINK), но я не понял ответа.

ответ

3
select coalesce(winner_id, finalist_id) as PLAYER_ID 
,  count(winner_id) as WINNER_TIMES 
,  count(finalist_id) as FINALIST_TIMES 
from (
     select winner_id 
     ,  null as finalist_id 
     from YourTable 
     union all 
     select null 
     ,  finalist_id 
     from YourTable 
     ) as SubQueryAlias 
group by 
     coalesce(winner_id, finalist_id) 

Live example at SQL Fiddle.

+0

Спасибо Andomar. Мне все еще нужно узнать больше о том, что у вас есть несколько вариантов. – Edu

0

Попробуйте ::

Select 
    user_id as user, 
    winner_temp.count(1) as winning_count 
    finalist_temp.count(1) as runner_up_count 
    from 
    user_table 
    left join 
    (Select winner_id, count(1) from table group by winner_id) as winner_temp on (user_table.user_id = winner_temp.winner_id) 
    left join 
    (Select finalist_id, count(1) from table group by finalist_id) as finalist_temp on 
    (user_table.user_id = finalist_temp.finalist_id) 
Смежные вопросы