Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql làm thế nào để nhận được giá trị cao thứ 2 với nhóm theo và tham gia bên trái

Đầu tiên, bạn không cần tham gia thứ ba nào cả. Bạn có thể thực hiện phép tính của mình trong một lần tham gia:

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;

Nhận giá trị lớn thứ hai cho mb sau đó sử dụng một thủ thuật, liên quan đến 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;

Ý tưởng là nối các giá trị với nhau, sắp xếp theo mb . Sau đó, lấy phần tử thứ hai của danh sách. Một nhược điểm là giá trị được chuyển đổi thành chuỗi ký tự, ngay cả khi nó bắt đầu dưới dạng số.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL Trùng lặp và loại bỏ hàng trùng lặp với ít dữ liệu nhất

  2. Lỗi PDO:Số tham số không hợp lệ:tham số không được xác định

  3. kết hợp jquery trong php để hiển thị danh sách có thể thu gọn được tìm nạp từ cơ sở dữ liệu

  4. Điền các trường ở dạng phương thức bằng PHP, jQuery

  5. Truy vấn MySQL chậm