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

MySQL 5.7 &only_full_group_by

  1. Đúng. Cột không được tổng hợp là bất kỳ cột nào không sử dụng hàm tổng hợp như MAX , COUNT , SUM , GROUP_CONCAT , v.v.

  2. Cột a phụ thuộc về mặt chức năng vào cột b nếu giá trị của b ngụ ý một giá trị cụ thể của a . Điều này thường có nghĩa là b là khóa duy nhất cho bảng và a là một số cột khác trong bảng đó.

  3. Được xác định duy nhất bởi giống như phụ thuộc hàm.

  4. Cách thay thế sẽ là liệt kê tất cả các cột không được tổng hợp trong GROUP BY danh sách:GROUP BY a.Z, a.Y, a.X .

Lý do cho tất cả điều này là khi bạn chọn các cột không nằm trong GROUP BY danh sách, chúng sẽ đến từ các hàng tùy ý trong các hàng được nhóm. Điều này dẫn đến nhiều lỗi phổ biến. Ví dụ, một lỗi phổ biến là viết:

SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id

và mong đợi ip_address để chứa địa chỉ của lần đăng nhập gần đây nhất cho mỗi người dùng. Nhưng nó thực sự sẽ chứa bất kỳ địa chỉ mà họ đã đăng nhập, không phải địa chỉ từ hàng có MAX(timestamp) . Xem SQL Chỉ chọn các hàng có Giá trị tối đa trên một cột để biết cách chính xác để làm điều đó.

Ngoại lệ phụ thuộc hàm thường hữu ích với các phép nối.

SELECT u.user_id, u.user_name, MAX(l.timestamp)
FROM users AS u
JOIN user_logins AS l ON u.user_id = l.user_id
GROUP BY u.user_id

Kể từ user_id là khóa chính của users bảng, nó xác định duy nhất user_name , vì vậy không cần thiết phải liệt kê rõ ràng trong GROUP BY .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi cú pháp do sử dụng từ dành riêng làm tên bảng hoặc cột trong MySQL

  2. Các câu lệnh SELECT được sử dụng có một số cột khác nhau (REDUX !!)

  3. Đầu ra PHP trống từ cơ sở dữ liệu MySQL cho một longblob

  4. So sánh thời gian chuyển đổi dự phòng proxy cơ sở dữ liệu - ProxySQL, MaxScale và HAProxy

  5. Lỗi nghiêm trọng:Gọi đến hàm không xác định mysql_connect_errno () trong