Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql как да получите 2-ра най-висока стойност с групиране по и в ляво съединение

Първо, изобщо не се нуждаете от трето присъединяване. Можете да направите изчислението си в едно присъединяване:

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;

Получаване на втората по големина стойност за mb след това използва трик, включващ substring_index() и 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;

Идеята е да свържем стойностите заедно, подреждайки по mb . След това вземете втория елемент от списъка. Единственият недостатък е, че стойността се преобразува в символен низ, дори когато започва като число.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Присъединена заявка липсват записи

  2. MySQL група по дата и конвертиране от времеви печат на unix

  3. Откриване на последователни елементи, отговарящи на определени критерии във времеви серии

  4. Как да активирате оператора за конкатенация на тръби в MySQL

  5. ningx, uwsgi, python постоянна грешка в mysql след известно време от стартиране на приложението