mysql - 查询以获取行的标识符和聚合函数值

标签 mysql sql group-by aggregate greatest-n-per-group

在 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 的情况下也能正常工作,但我还需要出现 MaxScoreBestRank 的游戏的 ID。

我在网上搜索了一些信息并尝试了 GROUP_CONCATHAVING ......但我无法获得我需要的结果。

编辑

作为查询的结果,我为每个用户排除了一行,其中包含 MaxScoreBestRank 以及达到这些的游戏的 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/

相关文章:

PHP POST 和 GET 在同一页面上

mysql - 需要没有自定义变量的查询

mysql - 按 id 选择行,但末尾的可变数字除外

php - 我想显示相同的 ID 数据

sql - 通过数据库中的文本字段实现智能搜索

c# - .GroupBy() 是否保证其分组的顺序?

mysql - 按日期和 Case 语句分组的 SQL 语法

mysql - 如果是我,请选择两个选项;如果是其他用户,请仅选择一个选项

MySQL子查询或连接不同数据库,其中数据库名称在主查询的结果集中

sql - PostgreSQL 中的空 GROUP BY