在 MySQL 数据库中有以下两个表:
USER
- ID
- Name
GAME1
- ID
- UserID
- Score
- Rank
这是我需要的 View :
- User.ID
- User.Name
- Game1.ID as MaxScoreGameID
- Max(Game1.Score) as MaxScore
- Game1.ID as BestRankGameID
- Min(Game1.Rank) as BestRank
我在没有 GameID 的情况下也能正常工作,但我还需要出现 MaxScore
和 BestRank
的游戏的 ID。
我在网上搜索了一些信息并尝试了 GROUP_CONCAT
、HAVING
......但我无法获得我需要的结果。
编辑
作为查询的结果,我为每个用户排除了一行,其中包含 MaxScore
和 BestRank
以及达到这些的游戏的 ID。
如果用户在多于 1 场比赛中得分相同(最好),我只希望用户行中有其中之一。
最佳答案
您可以使用过滤连接。该示例仅针对分数,但您可以为排名添加第二个过滤连接。
select u.name
, g1.ID as MaxScoreGameID
, g1.Score as MaxScore
from User u
join (
select UserID
, max(Score) as maxScore
from Game1
group by
UserID
) as MaxScorePerUser
on MaxScorePerUser.UserID = u.ID
join Game1 g1
on u.ID = g1.UserID
and MaxScorePerUser.MaxScore = g1.Score
关于mysql - 查询以获取行的标识符和聚合函数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21724992/