2015-12-16 72 views
0

我什麼上乍一看似乎是簡單的SQL查詢:)按行組合選擇數

所以,我有如下表,有三列strugling:PlayerId,性別,結果(所有整數類型)。

我想要做的是選擇不同的球員性別2(男)與每個結果的數量。 大概有50個可能的結果,所以新表應該有51列:

| PlayerId | 1 | 2 | 3 | ... | 50 |

所以我想看看每個男性(性別2)玩家獲得特定結果的次數。

***如果問題仍然不完全清楚:每場比賽後,我會插入一行,其中包含玩家ID,性別以及在該遊戲中獲得的結果(從1到50)的玩家。現在我想看看每個玩家獲得特定結果的次數。

回答

2

如果有50個結果,並且希望他們在列,那麼你是在談論一個支點。我傾向於有條件的聚集做這些:

select player, 
     sum(case when result = 0 then 1 else 0 end) as result_00, 
     sum(case when result = 1 then 1 else 0 end) as result_01, 
     . . . 
     sum(case when result = 50 then 1 else 0 end) as result_50 
from t 
group by player; 

您可以選擇特定的性別,如果你喜歡,where gender = 2。但爲什麼不同時計算所有的?

+0

非常感謝,這正是我所需要的,但我必須用「分組玩家」替換「選擇性別」和「按性別分組」來獲得我最初想要的內容。我不是同時計算所有,因爲我的主表中有2億美元的cca,我認爲限制到特定的性別會更快(我想過濾的性別是所有行的10%), –

0
select PleyerId from tablename where result = 'specific result you want' and gender = 2 group by PleyerId 
1

嘗試

select player, result, count(*) 
from your_table 
where Gender = 2 
group by player, result; 
0

最簡單的方法是使用旋轉:

;with cte as(Select * from t 
      Where gender = 2) 
Select * from cte 
Pivot(count(gender) for result in([1],[2],[3],....,[50]))p 

小提琴http://sqlfiddle.com/#!3/8dad5/3

一個注意:保持性別,成績表是一個壞主意。最好爲玩家制作一張單獨的桌子並保持性別。