【问题标题】:MySQL - Get top 5 opponentsMySQL - 获得前 5 名对手
【发布时间】:2015-08-14 09:33:04
【问题描述】:

我正在尝试找出与我交手的前 5 名对手。

表格如下

USERS :
 user_id  name               email
       1 : Gait Bakker     : user1@test.nl
       2 : Freek ter Bekke : user2@test.nl
       3 : Jan Zomer       : user3@test.nl
       4 : Mick Dundee     : user4@test.nl
       5 : Sjoerd Trekhaar : user@test.nl

GAMES :
    game_id type training **created_by started_by **opponent_id won_by date
          1    1        1          2              2           4      2 2015-08-10
          2    1        1          5              2           2      5 2015-08-10
          3    1        1          4              4           2      4 2015-08-10
          3    1        1          2              3           3      3 2015-08-10

问题是带有**的字段,它需要计算前5名对手。

我可以是游戏创建者(created_by)我可以是对手_id(其他人开始了游戏)。

如果我是我的对手,我还是和其他玩家交手。

编辑 请以 user-id = 2 为例。

另外:training需要为1且won_by IS NOT NULL(需要填写)

结果 SQL 与对手交手最多

user_id = 4,  count = 2
user_id = 3,  count = 1
user_id = 5,  count = 1

这意味着我对 user-id 4 玩得最多,然后是 user_id = 3 和 user_id = 5

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
  • @Strawberry : 使用 user_id = 2,但每个登录用户都有另一个用户 ID。
  • @jarlh Training = 1 AND won_by 不为空
  • @Strawberry,你是草莓!
  • @Strawberry :请使用 user_id = 2 (信息:我的意思是当我登录时我有 user_id 2 并且我想知道我的前 5 个对手,但是当 Jan Zomer 使用 user_id 登录时3 他想知道他的前 5 个对手)

标签: mysql sql


【解决方案1】:

根据我的理解,将根据Won_By考虑顶级对手

 SELECT TOP 5 NAME, COUNT(*) as COUNTS FROM USERS
  INNER JOIN
  GAMES
  ON GAMES.WON_BY = USERS.user_id
  WHERE user_id <> Logon_ID
  GROUP BY NAME
  ORDER BY COUNTS

根据您的代码派生Logon_ID

【讨论】:

  • 感谢您的回复,我的意思是与对手交手次数最多的比赛,无论输赢(请参阅我在帖子中的编辑)
猜你喜欢
  • 2014-01-25
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多