2012-06-17 46 views
2

我有这个表:组值和计数

UNIQUE_ID | WINNER_ID | FINALIST_ID 
________1 | ________1 | __________2 
________2 | ________1 | __________3 
________3 | ________3 | __________1 
________4 | ________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)