在JOIN中获得最高结果

Kei*_*mus 8 mysql sql join

我有三张桌子; 拍卖,拍卖出价和用户.表结构看起来像这样:

Auctions:

 id    title
 --    -----
  1     Auction 1
  2     Auction 2

Auction Bids:

 id    user_id    auction_id    bid_amt
 --    -------    ----------    -------
  1       1            1          200.00
  2       2            1          202.00
  3       1            2          100.00
Run Code Online (Sandbox Code Playgroud)

Users 只是一个标准表,具有id和用户名.

我的目的是加入这些表格,以便我可以获得这些出价的最高值,并获得与这些出价相关的用户名; 所以我有这样的结果集:

auction_id    auction_title    auctionbid_amt    user_username
----------    -------------    --------------    -------------
         1    Auction 1            202.00            Bidder2
         2    Auction 2            100.00            Bidder1
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的查询如下:

SELECT a.id, a.title, ab.bid_amt, u.display_name FROM auction a
    LEFT JOIN auctionbid ab ON a.id = ab.auction_id
        LEFT JOIN users u ON u.id = ab.user_id
GROUP BY a.id
Run Code Online (Sandbox Code Playgroud)

这得到了我追求的单行,但似乎显示最低的bid_amt,而不是最高的.

obi*_*mme 8

您可以使用MAX功能和子选择来获得每次拍卖的最高出价.如果您将此子选择与其他表连接并按如下所示设置where子句,则应该得到您要查找的内容.

SELECT a.id, a.title, ab.bid_points, u.display_name 
FROM Auction AS a
INNER JOIN (SELECT auction_id, MAX(bid_points) AS maxAmount FROM auction_bids GROUP BY auction_id) AS maxBids ON maxBids.auction_id = a.id
INNER JOIN auction_bids AS ab ON a.id = ab.auction_id
INNER JOIN users AS u ON u.id = ab.user_id
WHERE ab.auction_id = maxBids.auction_id AND ab.bid_amount = maxBids.maxAmount
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.