【发布时间】:2016-05-24 15:32:47
【问题描述】:
我有一张大表,需要选择一些变量。首先,这是表结构:
gamecode---team---player---won
1---TeamA---TeamAPlayer1---1
1---TeamA---TeamAPlayer2---1
1---TeamA---TeamAPlayer3---1
1---TeamB---TeamBPlayer1---0
1---TeamB---TeamBPlayer2---0
2---TeamA---TeamAPlayer1---0
2---TeamA---TeamAPlayer2---0
2---TeamB---TeamBPlayer1---1
3---TeamC---TeamCPlayer1---0
3---TeamD---TeamDPlayer1---1
3---TeamD---TeamDPlayer2---1
4---TeamB---TeamBPlayer1---1
4---TeamD---TeamDPlayer1---0
也就是说,Won 是一个虚拟变量,如果该队赢得比赛,则取 1,否则取 0。
现在,我的目的是:我想按球队或球员分组来计算胜利次数。我不想在 WHERE 子句中包含它,而是在 SELECT 部分中包含它,因为胜利的数量只是我想用同一个 SELECT 收集的众多其他中的一个。
我试过了:
SELECT count(distinct gamecode*won) as victories FROM Mytable WHERE <conditions>
但如果选择该选项,输掉所有比赛的球队将计为 1 场胜利,因为所有比赛代码获胜将等于 0。并且所有赢得和输掉一些比赛的球队都将计算他们所拥有的一场胜利,因为所有输掉的比赛都将导致游戏代码获胜变量的值为“零”。
在 SELECT 中包含 CASE 怎么样,例如:
SELECT count(distinct case when gamecode*won is not 0 then 1 else 0 end) FROM Mytable WHERE <conditions>
这当然行不通。有什么建议么?谢谢大家。
如果我按团队分组,预期的结果集是:
team---victories
TeamA---1
TeamB---2
TeamC---0
TeamD---1
即TeamA只赢了gamecode 1,输了gamecode 2; TeamB赢了gamecode 2和gamecode 4,输掉了gamecode 1; TeamC 没有赢得比赛,输掉了游戏代码 3;最后,TeamD赢了gamecode 3,输了gamecode 4。
【问题讨论】:
-
你看过
group by函数吗?您应该能够将其与where子句一起使用来拉取获胜的游戏。粗略查询SELECT count(*) as victories, teamid FROM Mytable WHERE won = 1 group by teamid -
正如我所说,我不想将它包含在 WHERE 子句中,因为我想为所有游戏选择许多其他变量,而不仅仅是 won=1 的游戏。
-
粗略查询,可以修改
group by和where里面的内容。 -
提供您预期的结果集
-
谢谢你,Alex,现在你对这个问题有了预期的结果。