Соединить строку с MAX строкой в ​​другой таблице? - PullRequest
6 голосов
/ 21 сентября 2011

Как объединить строку из одной таблицы в строку со значением MAX для данного столбца в другой таблице?

Например, у меня есть таблица auctions и таблица auction_bids. Я хочу присоединиться к таблице аукционов с самой высокой ставкой для этого аукциона (то есть с наибольшим значением для столбца bid_amount И где auction_id = x) в таблице auction_bids.

Ответы [ 5 ]

11 голосов
/ 21 сентября 2011

Это раздражающе сложно.Вам будет выгоднее использовать флаг "победитель" в каждом выигрышном аукционе.

SELECT * FROM auctions a
INNER JOIN 
(
    /* now get just the winning rows */
    SELECT * FROM auction_bids x
    INNER JOIN
    (
        /* how to tell the winners */
        SELECT auction_id, MAX(bid_amount) as winner
        FROM auction_bids
        GROUP BY auction_id
    ) y
    ON x.auction_id = y.auction_id
    AND x.bid_amount = y.winner
) b
ON a.auction_id = b.auction_id

Обратите внимание, что аукционы с нулевой ставкой вообще не будут перечислены, а аукционы со связями (может ли это случиться?)появляются один раз для каждой связанной ставки.

1 голос
/ 21 сентября 2011

Попробуйте это:

SELECT a.id, MAX(ab.bid_amount)
FROM auctions AS a
INNER JOIN action_bids AS ab 
   ON a.id = ab.auction_id
GROUP BY a.id;

Добавьте дополнительные столбцы к своим SELECT и GROUP BY предложениям по мере необходимости.

0 голосов
/ 21 сентября 2011

В основном вы должны использовать подзапрос, чтобы сделать это в фактическом соединении.

Select bid as highest_bid
  from auctions
    left outer join auctions_bids on action_bids.ref_no = auctions.ref_no
     and (select max(bid) from auctions_bids as ab 
           where auctions_bid.ref_no = a2.ref_no)
0 голосов
/ 21 сентября 2011

Попробуйте это

 Select A.ID,max(AB.bit_amount) 
 From  auctions A Inner Join Auction_bids AB on A.ID = AB.auction_ID
 Where A.ID = x
 Group By A.ID
0 голосов
/ 21 сентября 2011

Попробуйте это:

SELECT a.*, bid_amount
  FROM auction a INNER JOIN 
    (
     SELECT auction_id, MAX(bid_amount)  AS bid_amount
       FROM auction_bids
         WHERE acution_id = x
         GROUP BY auction_id
    ) b
    ON a.auction_id = b.auction_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...