按行组合选择计数

时间:2015-12-16 21:52:39

标签: sql sql-server database

我第一眼看到的似乎是简单的SQL查询:)

所以我有下面的表有三列:PlayerId,Gen​​der,Result(所有类型为整数)。

我正在尝试做的是选择性别2(男性)的不同玩家,每个结果的数量。 大约有50个可能的结果,因此新表应该有51列:

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

所以我想看看每个男性(性别2)玩家获得特定结果的次数。

***如果你的问题仍然不完全清楚:每场比赛结束后,我会在该游戏中插入一个玩家ID,性别和结果(从1到50)玩家的行。现在我想看看每个玩家获得特定结果的次数。

4 个答案:

答案 0 :(得分: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选择特定的性别。但为什么不同时计算所有?

答案 1 :(得分:1)

尝试

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

答案 2 :(得分:0)

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

答案 3 :(得分: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

一个注意事项:将性别保持在分数表中是一个坏主意。最好为玩家制作一个单独的桌子并保持性别。