【问题标题】:Mysql: using case condition when selecting variable list from tableMysql:从表中选择变量列表时使用大小写条件
【发布时间】: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 bywhere里面的内容。
  • 提供您预期的结果集
  • 谢谢你,Alex,现在你对这个问题有了预期的结果。

标签: php mysql select


【解决方案1】:

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

【讨论】:

  • 非常感谢您的回答。这正是我想要的。
【解决方案2】:

http://sqlfiddle.com/#!9/048903/2

SELECT team, count(distinct (IF(won=1,gamecode, null))) as victories 
FROM Mytable 
GROUP BY team

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多