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

mysql:select max (score) không trả về dữ liệu hàng có liên quan

Bạn đang sử dụng MAX , là một hàm tổng hợp. Hàm tổng hợp có tác dụng coi nhiều hàng trong bảng là một nhóm. Nếu bạn không làm bất kỳ điều gì đặc biệt, tất cả các hàng trong toàn bộ bảng sẽ được sử dụng như một nhóm lớn và khi một hàm tổng hợp như MAX ở đó, tất cả các hàng này sẽ được cô đọng lại thành một hàng tổng hợp. Hiệu ứng ngưng tụ đó cũng sẽ xảy ra đối với các hàm tổng hợp khác như MIN , SUM , GROUP_CONCAT và bạn bè (xem: http:// dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). Bạn cũng có thể áp dụng các nhóm cụ thể bằng cách sử dụng GROUP BY cấu trúc, nhưng nếu bạn không xuất hiện hàm tổng hợp sẽ chỉ tập hợp tất cả các hàng thành một hàng (nhưng tập hợp này xảy ra sau khi áp dụng WHERE điều kiện, vì vậy chỉ các hàng được lọc mới được tổng hợp)

Bây giờ, do hiệu ứng cô đọng hoặc 'giảm' này của các hàm tổng hợp, có một số cách để tạo ra một giá trị trong số nhiều giá trị. Đối với MAX , theo cách đó là chỉ liệt kê giá trị lớn nhất được tìm thấy cho tất cả các trường hợp của biểu thức mà bạn đã chuyển làm đối số cho MAX . Nhưng các cột khác của bạn không có chức năng tổng hợp như vậy. Đối với hầu hết các sản phẩm cơ sở dữ liệu, sự xuất hiện của cả cột chưa được tổng hợp cũng như được tổng hợp trong SELECT danh sách sẽ là một lỗi. Nhưng MySQL hoạt động sai / khác và chỉ trả về một trong các giá trị có sẵn cho mỗi biểu thức không tổng hợp được liệt kê trong SELECT chút. Giá trị nào tùy thuộc vào mysql - bạn không thể dựa vào bất kỳ thuật toán cụ thể nào.

Trong nhiều trường hợp, mọi người muốn làm điều gì đó với "bất kỳ hàng nào có giá trị lớn nhất", nói cách khác, tìm hàng có giá trị là giá trị lớn nhất, nhưng sử dụng các cột khác từ hàng đó chưa được tổng hợp. Giải pháp được cung cấp bởi middaparka làm được điều đó và cũng có những cách khác để đạt được điều đó (google cho nhóm tối đa của MySQL). Để biết thêm thông tin chung về các hàm tổng hợp và GROUP BY có liên quan , bạn có thể xem -shameless selfplug- bài viết của tôi tại đây: http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SELECT này mất 180 giây để hoàn thành

  2. Làm cách nào để loại bỏ các mục trùng lặp trong MySQL với tập dữ liệu 20 triệu hàng?

  3. Làm thế nào để đặt lại mật khẩu gốc MySQL đã quên?

  4. tạo cơ sở dữ liệu với pdo trong php

  5. Sử dụng dấu thời gian (hoặc ngày giờ) như một phần của khóa chính (hoặc một phần của chỉ mục được phân nhóm)