我有两张桌子,一张叫项目,一张叫出价。出价包含一堆带有 item_id 的出价。我正在尝试获取有关具有相关最高出价的项目的所有信息。
我试着做类似的事情
SELECT * FROM items JOIN bids ON items.id=bids.item_id GROUP BY item_id
然而,这似乎返回了第一个出价,而不是最高的。
我怎样才能达到最高?
我有两张桌子,一张叫项目,一张叫出价。出价包含一堆带有 item_id 的出价。我正在尝试获取有关具有相关最高出价的项目的所有信息。
我试着做类似的事情
SELECT * FROM items JOIN bids ON items.id=bids.item_id GROUP BY item_id
然而,这似乎返回了第一个出价,而不是最高的。
我怎样才能达到最高?
您需要使用子查询来发现最大出价值,然后将其与现有查询相结合以获得所有所需的输出数据。假设出价在名为 的列中value
,并且该bids
表的 PK 为名为 的列id
:
SELECT items.*, bids.*
FROM
items
JOIN (
SELECT id, item_id, MAX(value) AS value FROM bids GROUP BY item_id
) AS maxbids ON items.id = maxbids.item_id
JOIN bids ON bids.id = maxbids.id
GROUP BY items.id
如果有多个最大金额的出价,则此查询将返回所有出价。
我认为,自加入也可以。所以,假设(正如@eggyal 所做的那样)有一个bids.value
列:
SELECT *
FROM items i
JOIN bids b1 ON b1.item_id=i.id
JOIN bids b2 ON b2.item_id=i.id AND b2.value>b1.value
WHERE b2.id IS NULL
但是,如果有多个相同金额的出价,这将返回多行。你想如何处理它们?
(这SELECT *
应该缩小范围。)