两个表如何根据其中之一的最高值联接到表?

时间:2019-01-04 14:01:59

标签: mysql sql mysql-workbench

我有一个名为Auction的表,其中包含一个auctionID。我还有一个名为bid的表,其中包含auctionID(作为外键)和金额。

我想做的是在一列中列出auctionID,在另一列中列出最高出价。

我尝试了不同的方式进行内部联接,以使其正确显示,但失败了。请记住,关于MYSQL我是一个新手,解决方案很可能是我应该回过头来重新设计整个数据库。

我要显示的最接近的是以下两种不同的方法。

第一个

SELECT auction.auctionID, bid.bid
from bid
INNER JOIN 
auction on auction.auctionsID = bid.auctionsID;

第二个如下

SELECT auction.auctionsID, bid.bid 
from bid
INNER JOIN 
auction on auction.auctionsID = bid.auctionsID
where bid.bid = (select max(bid.bid) from bid);

第一个显示已完成的所有出价以及它们的出价金额,但我只希望每个auctionID上的最高出价。

第二个仅显示所有不同拍卖的绝对最高出价,以及特定拍卖的auctionID

我的猜测是我需要某种嵌套的join语句,但是我实在无法解决这个问题。

提前谢谢!

编辑:真是太棒了。作为一个长期的用户,绝望地创建了一个帐户来询问我的第一个问题。我从这个社区得到了很棒的帮助。

答案:

SELECT auctionid, MAX(bid) as maxbid FROM bid GROUP BY auctionid;

由Caius Jard和Deependra Bhandari提供

4 个答案:

答案 0 :(得分:1)

我认为您只需要一个GROUP BY查询:

SELECT
    a.auctionID, MAX(b.bid) AS max_bid
FROM auction a
INNER JOIN bid b
    ON a.auctionsID = b.auctionsID
GROUP BY
    a.auctionID;

这假设您要为每次拍卖找到最高出价。

答案 1 :(得分:0)

在加入之前对出价表进行分组

SELECT * FROM
  auction a
  INNER JOIN
  (SELECT auctionid, MAX(bid) as maxbid FROM bid GROUP BY auctionid) b
  on a.auctionid = b.auctionid

因此,您将获得每次拍卖的详细信息(包括ID)以及每次拍卖的最高出价

迪彭德拉(Deependra)提出了一个观点;您确实说过,您只想要拍卖编号和最高出价,而该信息只能从bids表中得出(在我的上面的代码中,别名为b的子查询,因此,如果这是您真正需要的所有内容,请剥离我的查询只是子查询。如果您以后想要有关拍卖的所有其他信息及其最高出价,请使用上面的查询

如果您需要所有拍卖信息和所有最大出价信息,则可以针对每次拍卖执行以下操作:

SELECT * FROM
  auction a
  INNER JOIN
  bid b 
  ON a.auctionid = b.auctionid
  INNER JOIN
  (SELECT auctionid, MAX(bid) as maxbid FROM bid GROUP BY auctionid) mb
  on a.auctionid = mb.auctionid and b.bid = mb.maxbid

这将返回有关拍卖的所有信息以及有关最高出价的所有信息。希望您只允许唯一出价,否则我们将陷入更复杂的“最新”最高出价方案

答案 2 :(得分:0)

如果您只需要两列,并且在投标表中都可用,那么为什么要加入。使用以下内容。

选择auctionID,最高(出价)为最高发票 从出价 按AuctionID分组;

答案 3 :(得分:0)

如果您想针对给定的拍卖提取最高出价的bid,请使用带有相关子查询的JOIN

SELECT a.auctionsID, b.bid 
FROM 
    bid
    INNER JOIN auction a
        ON  a.auctionsID = b.auctionsID
        AND b.amount = (SELECT MAX(amount) FROM bid WHERE bid = b.bid)