两个表如何基于其中一个表中的最高值连接到表中?

moiiocjp  于 2021-06-16  发布在  Mysql
关注(0)|答案(4)|浏览(300)

我有一张table叫 Auction 它有一个 auctionID . 我还有一张table叫 bid 它持有 auctionID (作为外键)以及金额是多少。
我要做的是列出 auctionID 在一列和金额最高的出价在另一列。
我尝试了不同的方法来进行内部连接,以使其正确显示,但失败得很惨。请记住,我对mysql完全是个新手,解决方案很可能是我应该回去重新设计整个数据库。
最接近我想要显示的是下面两种不同的方法。
第一个

  1. SELECT auction.auctionID, bid.bid
  2. from bid
  3. INNER JOIN
  4. auction on auction.auctionsID = bid.auctionsID;

第二种情况如下

  1. SELECT auction.auctionsID, bid.bid
  2. from bid
  3. INNER JOIN
  4. auction on auction.auctionsID = bid.auctionsID
  5. where bid.bid = (select max(bid.bid) from bid);

第一个显示所有的出价,已经作出了什么数额,他们在哪里,但我只想对每个出价最高 auctionID .
第二个只显示在所有不同的拍卖会上有史以来的绝对最高出价 auctionID 那次特别的拍卖已经成功了。
我的猜测是我需要某种嵌套的join语句,但我实在想不起来。
提前谢谢!
编辑:多棒的经历啊。作为一个长期的用户,出于绝望创建了一个帐户今天问我的第一个问题。我从这个社区得到了很棒的帮助。
答案是:

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

由caius jard和deependra bhandari提供

7uhlpewt

7uhlpewt1#

我想你只是想 GROUP BY 查询:

  1. SELECT
  2. a.auctionID, MAX(b.bid) AS max_bid
  3. FROM auction a
  4. INNER JOIN bid b
  5. ON a.auctionsID = b.auctionsID
  6. GROUP BY
  7. a.auctionID;

这假设您希望找到每个拍卖的最高出价。

nbewdwxp

nbewdwxp2#

如果您只需要两列,并且这两列在bid表中都可用,那么为什么要进行join。使用下面的一个。
按auctionid从bid组中选择auctionid,max(bid)作为最高发票;

wgeznvg7

wgeznvg73#

在加入之前对bids表进行分组

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

因此,您将获得每次拍卖的详细信息(包括id)以及每次拍卖的最高出价
迪彭德拉说得很好;你说过你只需要auctionid和max bid,这个信息只能从bids表(子查询别名为 b 在我上面的代码中,如果您真的需要它,请将我的查询简化为子查询。如果您以后需要有关拍卖的所有其他信息,以及其最大出价,请使用上面的查询
如果您需要所有拍卖信息和所有maxbid信息,对于每个拍卖,您可以这样做:

  1. SELECT * FROM
  2. auction a
  3. INNER JOIN
  4. bid b
  5. ON a.auctionid = b.auctionid
  6. INNER JOIN
  7. (SELECT auctionid, MAX(bid) as maxbid FROM bid GROUP BY auctionid) mb
  8. on a.auctionid = mb.auctionid and b.bid = mb.maxbid

这将返回有关拍卖的所有信息和有关最高出价的所有信息。希望你只允许独特的出价,否则我们将进入一个更复杂的“最新”最高出价的情况

展开查看全部
xfyts7mz

xfyts7mz4#

如果你想拔出 bid 在给定拍卖的最高出价中,使用 JOIN 使用相关子查询:

  1. SELECT a.auctionsID, b.bid
  2. FROM
  3. bid
  4. INNER JOIN auction a
  5. ON a.auctionsID = b.auctionsID
  6. AND b.amount = (SELECT MAX(amount) FROM bid WHERE bid = b.bid)

相关问题