0

次のテーブルを作成しました。

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 句に指定するか、集計関数で使用する必要があります

私は何を間違っていますか?

4

3 に答える 3

1

ウィンドウ関数が欲しかったのでしょうか?

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
于 2013-06-30T21:36:39.170 に答える
0
SELECT *
FROM items i
JOIN bids b ON b.item_id = i.id
WHERE i.store_id = $store_id
AND NOT EXISTS (
   SELECT *
   FROM bids nx                 -- No bid should exist
   WHERE nx.item_id = b.item_id -- ... for the same item
   AND nx.amount > b.amount     -- ... but with a higher price
   );
于 2013-06-30T19:01:57.970 に答える
0

エラーメッセージは、何が間違っているかを示しています。集計関数 ( 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;
于 2013-06-30T18:49:00.960 に答える