下表名为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我想要创建一个查询,它只选择最高总数的领域、种族和性别。每次我使用GROUP BY,我都会得到两性。
输出表如下所示:
realm | race | gender | total
----------+------------+--------+--------
Buffalo | faerie | F | 5972
Buffalo | footballer | M | 2093
Buffalo | raccoon | F | 2118
...我想我对如何比较行的理解很差。
我不知道如何写WHERE子句,这样当我GROUP BY realm,race,gender时,我只能得到一个性别。
发布于 2020-11-24 20:29:08
区别于的完美用例
SELECT DISTINCT ON (realm, race) *
FROM tbl
ORDER BY realm, race, total DESC;db<>fiddle https://dbfiddle.uk/?rdbms=postgres_13&fiddle=ff3995bb8a03c9bdea8e8e504cc8068d
值得注意的是,该查询根本没有GROUP BY。
假设总和为NOT NULL,则附加NULLS LAST。
在领带的情况下,胜利者是任意的,除非您添加了更多的ORDER BY项目来打破领带。
详细说明:
发布于 2020-11-24 20:41:01
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.maxtotalhttps://stackoverflow.com/questions/64994082
复制相似问题