为了账号安全,请及时绑定邮箱和手机立即绑定

如何简化这个游戏统计查询?

如何简化这个游戏统计查询?

慕容森 2019-07-17 18:50:13
如何简化这个游戏统计查询?这段代码如预期的那样工作,但我觉得它很长,而且令人毛骨悚然。select p.name, p.played, w.won, l.lost from(select users.name, count(games.name) as playedfrom usersinner join games on games.player_1_id = users.idwhere games.winner_id > 0group by users.nameunionselect users.name, count(games.name) as playedfrom usersinner join games on games.player_2_id = users.idwhere games.winner_id > 0group by users.name) as pinner join(select users.name, count(games.name) as wonfrom usersinner join games on games.player_1_id = users.idwhere games.winner_id = users.idgroup by users.nameunionselect users.name, count(games.name) as wonfrom usersinner join games on games.player_2_id = users.idwhere games.winner_id = users.idgroup by users.name) as w on p.name = w.nameinner join(select users.name, count(games.name) as lostfrom usersinner join games on games.player_1_id = users.idwhere games.winner_id != users.idgroup by users.nameunionselect users.name, count(games.name) as lostfrom usersinner join games on games.player_2_id = users.idwhere games.winner_id != users.idgroup by users.name) as l on l.name = p.name如您所见,它由三个用于检索的重复部分组成:玩家名称和他们玩的游戏数量玩家的名字和他们赢得的游戏数量玩家名称和他们输掉的游戏数量每一部分还包括两个部分:玩家名称和作为Player_1参加的游戏数量玩家名称和作为Player_2参与的游戏数量如何简化?结果如下:           name            | played | won | lost ---------------------------+--------+-----+------ player_a                  |      5 |   2 |    3 player_b                  |      3 |   2 |    1 player_c                  |      2 |   1 |    1
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

在这种情况下,相关子查询可以简化逻辑:

select u.*, (played - won) as lostfrom (select u.*,
             (select count(*)
              from games g              where g.player_1_id = u.id or g.player_2_id = u.id             ) as played,
             (select count(*)
              from games g              where g.winner_id = u.id             ) as won      from users u     ) u;

这假定没有任何联系。


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 526 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信