Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql, wie man den zweithöchsten Wert mit group by und in einem linken Join erhält

Erstens brauchen Sie überhaupt keinen dritten Join. Sie können Ihre Berechnung in einem Join durchführen:

from (select id
      from owner
      where date_format(auction_date,'%Y-%m-%d %H:%i:00') = date_format(NOW(),'%Y-%m-%d %H:%i:00')
     ) as a left join
     (select owner_id, max(nb) as maxbid, max(mb) as maxautobi
      from auction
      group by owner_id
     ) b
     on a.id=b.owner_id;

Abrufen des zweitgrößten Werts für mb verwendet dann einen Trick mit substring_index() und group_concat() :

   from (select id
          from owner
          where date_format(auction_date,'%Y-%m-%d %H:%i:00') = date_format(NOW(),'%Y-%m-%d %H:%i:00')
         ) as a left join
         (select owner_id, max(nb) as maxbid, max(mb) as maxautobi,
                 substring_index(substring_index(group_concat(mb order by mb desc), ',', 2), ',', -1
                                ) as second_mb
          from auction
          group by owner_id
         ) b
         on a.id=b.owner_id;

Die Idee ist, die Werte miteinander zu verketten und nach mb zu ordnen . Dann nehmen Sie das zweite Element der Liste. Der einzige Nachteil ist, dass der Wert in eine Zeichenkette umgewandelt wird, selbst wenn er als Zahl beginnt.