尝试分组时查询选择了错误的数据

Query selecting wrong data when trying to group

这个MySQL查询应该return今天得分低于270的TOP 15玩家。每个玩家都可以玩很多次,所以它应该return玩家最高分。我不明白 GROUP BYSELECT 子句有什么问题。

SELECT userName, 
       MAX(CAST(Score AS UNSIGNED)) Score
FROM Game 
WHERE userName IS NOT NULL AND 
      CAST(Score AS UNSIGNED) < 270 AND 
      DATE(PlayTime) = DATE(NOW())
GROUP BY FBId, userName, CAST(Score AS UNSIGNED)
ORDER BY CAST(Score AS UNSIGNED) DESC LIMIT 15

FBId 对每个玩家都是唯一的,这就是为什么我在 GROUP BY 子句中取消它,如果玩家有相同的名字,userName 可以相等。

P.s。分数是 VARCHAR 类型,这就是我将其转换为 INT.

的原因

使用上面的查询后,它选择了以下重复名称:

Will Jason          227
Will Jason          226
Jessica Anton       219
Jessica Anton       218
Tom Edi             215
Simon Dougs         213
Peter Yang          210
Steeve Maclay       208
Monica Termson      207
Dave Stuart         206

那是因为包含了 ScoreGROUP BY 子句?


但是如果我使用以下查询(从 GROUP BY 中删除了 CAST(Score AS UNSIGNED)):

SELECT userName, 
       MAX(CAST(Score AS UNSIGNED)) Score
FROM Game 
WHERE userName IS NOT NULL AND 
      CAST(Score AS UNSIGNED) < 270 AND 
      DATE(PlayTime) = DATE(NOW())
GROUP BY FBId, userName
ORDER BY CAST(Score AS UNSIGNED) DESC LIMIT 15

也选错了(跳过部分用户):

Will Jason          227
Jessica Anton       219
Jeniffer Taylor     195
Tom Drugton         187
Monica Termson      207
Christina Queenton  183
Dave Stuart         206
David Tomson        170
Susan Clark         205
Sarah Lopez         188

你有什么想法吗?似乎第一个查询选择了具有重复名称的正确值。

更新:

Table结构:

Id INT AUTO_INCREMENT
FBId INT
Score VARCHAR(20)
userName NVARCHAR(80)
PlayTime TIMESTAMP
select fbid, username, max(score) as thescore
  from game
    where score < 270
  group by fbid
  order by max(cast(score as unsigned)) desc limit 15;

演示:http://sqlfiddle.com/#!9/3e2bc/9