我有一张大表,需要选择一些变量。首先,这是表结构:
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胜利,因为所有游戏代码获胜将等于零。所有赢得和失去一些比赛的球队都将获得一场胜利,因为所有输掉的比赛都会导致一场比赛失利。游戏代码的值赢得了变量。
如何在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只获得了游戏代码1并且输掉了游戏代码2; TeamB赢得了游戏代码2和游戏代码4,同时丢失了游戏代码1; TeamC没有赢得比赛并输掉了游戏代码3;最后,TeamD赢得了游戏代码3并丢失了游戏代码4。
答案 0 :(得分:0)
http://sqlfiddle.com/#!9/3a6a3/2
这个小提琴显示了一种方法。
查询
select count(distinct (nullif(gamecode*won,0))) as victories, team from games group by team;
请参阅http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_nullif
答案 1 :(得分:0)
http://sqlfiddle.com/#!9/048903/2
SELECT team, count(distinct (IF(won=1,gamecode, null))) as victories
FROM Mytable
GROUP BY team