首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为每个组返回带最大值的行

为每个组返回带最大值的行
EN

Stack Overflow用户
提问于 2020-11-24 20:08:52
回答 2查看 172关注 0票数 0

下表名为t2

代码语言:javascript
复制
  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,我都会得到两性。

输出表如下所示:

代码语言:javascript
复制
  realm   |    race    | gender | total  
----------+------------+--------+--------
 Buffalo  | faerie     | F      |   5972
 Buffalo  | footballer | M      |   2093
 Buffalo  | raccoon    | F      |   2118
...

我想我对如何比较行的理解很差。

我不知道如何写WHERE子句,这样当我GROUP BY realm,race,gender时,我只能得到一个性别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-24 20:29:08

区别于的完美用例

代码语言:javascript
复制
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项目来打破领带。

详细说明:

票数 1
EN

Stack Overflow用户

发布于 2020-11-24 20:41:01

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64994082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档