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

hàm sql min và cột khác

Để bắt đầu với:Không,

SELECT user_id, MAX(salary) FROM users;

không tuân thủ tiêu chuẩn. Bạn đang sử dụng một hàm tổng hợp (MAX ) không có GROUP BY mệnh đề. Bằng cách đó, bạn yêu cầu DBMS tổng hợp tất cả các bản ghi vào một hàng kết quả duy nhất. Bây giờ bạn yêu cầu DBMS hiển thị điều gì trong hàng kết quả này? Mức lương tối đa được tìm thấy trong bảng (MAX(salary) ) và the user_id . Tuy nhiên, không có the user_id; có thể có nhiều user_id khác nhau trong bàn. Điều này vi phạm tiêu chuẩn SQL. MySQL có quyền tự do diễn giải user_id không tổng hợp như bất kỳ user_id (tự ý chọn).

Vì vậy, ngay cả khi truy vấn chạy, kết quả của nó thường không phải là kết quả mong muốn.

Truy vấn này:

SELECT user_id, name, MAX(salary) FROM users GROUP BY user_id;

mặt khác là tuân thủ tiêu chuẩn. Hãy xem lại truy vấn này làm gì:Lần này có GROUP BY mệnh đề cho DBMS biết bạn muốn một hàng kết quả cho mỗi user_id . Đối với mỗi user_id bạn muốn hiển thị: the user_id , the namesalary tối đa . Tất cả những điều này là biểu thức hợp lệ; the user_iduser_id chính nó, the tên là một tên người dùng được liên kết với user_idsalary tối đa là mức lương tối đa của người dùng. Cột chưa được tổng hợp name được cho phép, vì nó phụ thuộc về mặt chức năng vào user_id được nhóm theo nhóm . Tuy nhiên, nhiều DBMS không hỗ trợ điều này bởi vì việc xác định một biểu thức có phụ thuộc vào nhóm về mặt chức năng hay không sẽ trở nên vô cùng phức tạp.

Để làm thế nào để hiển thị hồ sơ người dùng với mức lương tối đa, bạn cần một điều khoản giới hạn. MySQL cung cấp LIMIT đối với điều này, có thể giúp bạn có được n hàng đầu tiên. Tuy nhiên, nó không liên quan đến các mối quan hệ.

SELECT * FROM users ORDER BY salary DESC LIMIT 1;

SELECT * FROM users ORDER BY salary FETCH FIRST ROW ONLY;

trong SQL chuẩn.

Tuy nhiên, để đối phó với các ràng buộc, như trong

SELECT * FROM users ORDER BY salary FETCH FIRST ROW WITH TIES;

bạn cần một truy vấn con trong MySQL, bởi vì LIMIT không hỗ trợ điều này:

SELECT * FROM users WHERE salary = (SELECT MAX(salary) FROM users);


  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 CHỌN bên trong CẬP NHẬT

  2. MySQL:Đã xảy ra lỗi với tìm kiếm Fulltext - KHÔNG trả về kết quả

  3. Các phương pháp hay nhất để tối ưu hóa trang web LAMP để tăng tốc độ?

  4. Làm cách nào để MySql 8 chạy với laravel?

  5. Không có đủ kết nối nhàn rỗi trong Tomcat JDBC pool