按汇总选择整行

我正在为应该是一个简单的SQL查询的东西而苦恼。

这是我的初始数据库架构:

按汇总选择整行

还在SQLFiddle

中准备了示例

我最终遇到的查询是:

select
       b.ad_id,b.auction_id,max(b.amount) as max,max(b.created_at) created_at
from bid b
where b.user_id = '601'
group by b.ad_id,b.auction_id

但是结果是,我需要bid表中的整行:

select
       b.id,b.ad_id,b.auction_id

哪个失败:[42803] ERROR: column "b.id" must appear in the GROUP BY clause or be used in an aggregate function Position: 16。无法在GROUP BY子句中添加id字段,因为它将添加一些我不需要的额外行。

我需要从bid表中选择按auction_id和ad_id分组的最高记录(金额字段)。

我认为我需要进行一些自我内部联接或子选择,但是现在我无法编写SQL。

okraa 回答:按汇总选择整行

  

我需要从出价表中选择按auction_id和ad_id分组的最高记录(金额字段)

看看文档中的DISTINCT ON。您的期望结果将通过以下查询获得。

select DISTINCT ON (b.ad_id,b.auction_id)
       b.id,b.ad_id,b.auction_id,b.amount
       b.created_at
from bid b
where b.user_id = '601'
ORDER BY b.ad_id,b.amount DESC
,

如果您想要给定用户每次拍卖的最新行,则可以使用相关子查询进行过滤:

select b.*
from bid b
where b.user_id = '601' and
      b.created_at = (select max(b2.created_at)
                      from bid b2
                      where b2.auction_id = b.auction_id and
                            b2.user_id = b.user_id
                     );

这似乎是您想要的明智的解释。我不知道是否需要ad_id

本文链接:https://www.f2er.com/2968918.html

大家都在问