Sql 返回每个组具有最大值的行

Sql 返回每个组具有最大值的行,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我有一个名为t2的下表: realm | race | gender | total ----------+------------+--------+-------- Buffalo | faerie | F | 5972 Buffalo | faerie | M | 2428 Buffalo | footballer | F | 1954 Buffalo | footballer | M

我有一个名为t2的下表:

  realm   |    race    | gender | total  
----------+------------+--------+--------
 Buffalo  | faerie     | F      |   5972
 Buffalo  | faerie     | M      |   2428
 Buffalo  | footballer | F      |   1954
 Buffalo  | footballer | M      |   2093
 Buffalo  | raccoon    | F      |   2118
 Buffalo  | raccoon    | M      |   1237
 Buffalo  | shark      | F      |  12497
 Buffalo  | shark      | M      |   3621
 Buffalo  | wizard     | F      |    468
 Buffalo  | wizard     | M      |  11079
 Camelot  | faerie     | F      |   2414
 Camelot  | faerie     | M      |   1455
我想创建一个查询,只选择总和最高的领域、种族和性别。每次我使用
groupby
时,我总是得到两种性别

输出表如下所示:

  realm   |    race    | gender | total  
----------+------------+--------+--------
 Buffalo  | faerie     | F      |   5972
 Buffalo  | footballer | M      |   2093
 Buffalo  | raccoon    | F      |   2118
...
我想我对如何比较行的理解很差。
我不知道如何编写
WHERE
子句,这样当我
按领域、种族、性别分组时,我只能得到1个性别。

一个完美的用例:

在(领域、种族)上选择DISTINCT*
来自tbl
按领域、种族、总描述排序;
小提琴

值得注意的是,查询根本没有分组依据。
假设总计不为NULL
,否则追加
最后为NULL

在平局的情况下,赢家是任意的,除非您添加更多的
ORDER BY
项目以打破平局

详细说明:


您不显示是什么SQL生成了输出。这会很有帮助。输出应该是什么样子?你说你想要“领域、种族和性别的总和最高”,你说你“继续得到两性”。当你期望1张唱片时,你得到3张唱片,这不是问题吗
Buffalo | shark | F 12497
让我用我编写的查询编辑问题您的查询甚至不使用
adventure
表。你所有的“问题”是如何关联的?我写的“冒险”是一个通用表格。我认为回答这个问题不需要我的提问。该表是“t2”有趣的战略,它的工作!非常感谢你!
select q.realm
, q.race
, q.gender
, q.total

from (
    Select t2.realm
    , t2.race
    , t2.gender
    , total
    , max(total) over (partition by t2.realm, t2.race) as maxtotal

    FROM adventure t2
) q
where q.total = q.maxtotal