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