Mysql:从表中选择变量列表时使用大小写条件

时间:2016-05-24 15:32:47

标签: php mysql select

我有一张大表,需要选择一些变量。首先,这是表结构:

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。

2 个答案:

答案 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