Sql 按行组合选择计数
我正在为乍一看似乎是简单的SQL查询而苦苦挣扎:) 下面的表有三列:PlayerId、Gender、Result(都是integer类型) 我想做的是,选择不同性别的球员2(男性),每个结果的数量。 大约有50个可能的结果,因此新表应该有51列: |玩家ID | 1 | 2 | 3 |……|五十| 所以,我想看看每个男性(性别2)运动员获得特定结果的次数 ***以防你们还不完全清楚这个问题:在每一场比赛后,我插入一行,其中有玩家ID、性别和在该游戏中获得的结果(1-50)。现在我想看看每个玩家取得特定成绩的次数。试试看Sql 按行组合选择计数,sql,sql-server,database,Sql,Sql Server,Database,我正在为乍一看似乎是简单的SQL查询而苦苦挣扎:) 下面的表有三列:PlayerId、Gender、Result(都是integer类型) 我想做的是,选择不同性别的球员2(男性),每个结果的数量。 大约有50个可能的结果,因此新表应该有51列: |玩家ID | 1 | 2 | 3 |……|五十| 所以,我想看看每个男性(性别2)运动员获得特定结果的次数 ***以防你们还不完全清楚这个问题:在每一场比赛后,我插入一行,其中有玩家ID、性别和在该游戏中获得的结果(1-50)。现在我想看看每个玩家取
select PleyerId from tablename where result = 'specific result you want' and gender = 2 group by PleyerId
试一试
如果有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;
如果愿意,您可以使用
选择特定的性别,其中性别=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;
如果愿意,您可以使用
选择特定的性别,其中性别=2
。但是为什么不同时计算所有数据呢?最简单的方法是使用旋转:
;with cte as(Select * from t
Where gender = 2)
Select * from cte
Pivot(count(gender) for result in([1],[2],[3],....,[50]))p
拨弄
注意:在分数表中保留性别是个坏主意。最好为玩家单独制作一张桌子,并保留性别。最简单的方法是使用旋转:
;with cte as(Select * from t
Where gender = 2)
Select * from cte
Pivot(count(gender) for result in([1],[2],[3],....,[50]))p
拨弄
注意:在分数表中保留性别是个坏主意。最好为玩家单独制作一张表,并保留性别。非常感谢,这正是我所需要的,但我不得不用“选择玩家”替换“选择性别”,用“按玩家分组”替换“按性别分组”,以得到我最初想要的。我并不是同时计算所有数据,因为我的主表中有2亿cca,我假设限制特定的性别会更快(我想过滤的性别是所有行的10%),非常感谢,这正是我所需要的,但我不得不用“选择玩家”替换“选择性别”,用“按玩家分组”替换“按性别分组”得到我最初想要的东西。我不是同时计算所有数据,因为我的主表中有2亿cca,我假设限制特定性别会更快(我要筛选的性别占所有行的10%)