Sql 返回每个组具有最大值的行
我有一个名为t2的下表: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
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
项目以打破平局
详细说明:
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