Postgresql 从另一个表联接列的最大值

Postgresql 从另一个表联接列的最大值,postgresql,Postgresql,我创建了以下表格: create table items ( id serial primary key, store_id int, ); create table bids ( item_id int, amount int ); 我想从某个商店选择所有商品,并包括有关最高出价的信息: select items.*, max(bids.amount) from items join bids on bids.item_id = items.id w

我创建了以下表格:

create table items (
    id serial primary key,
    store_id int,
);

create table bids (
    item_id int,
    amount int
);
我想从某个商店选择所有商品,并包括有关最高出价的信息:

select items.*, max(bids.amount) from items
    join bids on bids.item_id = items.id
where items.store_id = $store_id
我得到以下错误:

列“items.id”必须出现在GROUP BY子句中或在聚合函数中使用


我做错了什么?

您的错误消息告诉您做错了什么。要使用聚合函数(
max()
),您的
SELECT
子句中的所有其他内容都必须位于
GROUP BY
子句中

SELECT items.*, MAX(bids.amount)
FROM items
JOIN bids ON bids.item_id = items.id
WHERE items.store_id = $store_id
GROUP BY items.id,items.store_id;

也许你想要一个窗口功能

select items.*, 
       max(bids.amount) over (partition by bids.item_id) as max_bid_for_item
from items
    join bids on bids.item_id = items.id
where items.store_id = $store_id

你的博士后版本?博士后版本无关紧要,不是吗?他使用的是聚合函数,而不提供分组clause@Trent在更高版本的Postgres中,您只能在
GROUP BY
中提及表的主键,而不是所有列。如果一行没有出价,我希望
MAX(bids.amount)
为0怎么样?现在如果没有出价,项目就不会被选中。这是一个单独的问题,但您可以使用
COALESCE
SELECT items.*,COALESCE(MAX(bids.amount),0)FROM items…
select items.*, 
       max(bids.amount) over (partition by bids.item_id) as max_bid_for_item
from items
    join bids on bids.item_id = items.id
where items.store_id = $store_id