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

Hàm MAX trong mệnh đề mysql ở đâu

Chúng tôi không thể tham chiếu kết quả của một hàm tổng hợp (ví dụ:MAX() ) trong một WHERE mệnh đề của cùng một SELECT .

Mô hình quy chuẩn để giải quyết loại vấn đề này là sử dụng chế độ xem nội tuyến, giống như sau:

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
  JOIN ( SELECT MAX(mx.id) AS max_id
           FROM mytable mx
       ) m
    ON m.max_id = t.id

Đây chỉ là một cách để có được kết quả được chỉ định. Có một số cách tiếp cận khác để có được kết quả tương tự, và một số trong số đó có thể kém hiệu quả hơn nhiều so với những cách khác. Các câu trả lời khác chứng minh cách tiếp cận này:

 WHERE t.id = (SELECT MAX(id) FROM ... )

Đôi khi, cách tiếp cận đơn giản nhất là sử dụng ORDER BY có GIỚI HẠN. (Lưu ý rằng cú pháp này dành riêng cho MySQL)

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
 ORDER BY t.id DESC
 LIMIT 1

Lưu ý rằng điều này sẽ chỉ trả về một hàng; vì vậy nếu có nhiều hơn một hàng có cùng giá trị id, thì điều này sẽ không trả về tất cả chúng. (Truy vấn đầu tiên sẽ trả về TẤT CẢ các hàng có cùng giá trị id.)

Cách tiếp cận này có thể được mở rộng để có nhiều hơn một hàng, bạn có thể lấy năm hàng có giá trị id cao nhất bằng cách thay đổi nó thành LIMIT 5 .

Lưu ý rằng hiệu suất của phương pháp này đặc biệt phụ thuộc vào chỉ mục phù hợp có sẵn (tức là với id làm TỪ KHÓA CHÍNH hoặc làm cột hàng đầu trong một chỉ mục khác.) Một chỉ mục phù hợp sẽ cải thiện hiệu suất của các truy vấn bằng cách sử dụng tất cả các phương pháp này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại dữ liệu để lưu trữ Kinh độ / Vĩ độ trong Mysql

  2. Mysql giải pháp cho các chức năng cửa sổ

  3. MySQLi chuẩn bị báo cáo lỗi báo cáo

  4. mysql không thể chèn vì không có giá trị mặc định?

  5. NodeJS mySQL Chèn Blob