Trong trường hợp sử dụng MAX()
GROUP BY
về cơ bản mệnh đề cho công cụ truy vấn biết cách nhóm các mục từ đó xác định giá trị tối đa. Trong ví dụ đầu tiên của bạn, bạn chỉ chọn một cột duy nhất, vì vậy không cần phải nhóm. Nhưng trong ví dụ thứ hai của bạn, bạn có nhiều cột. Vì vậy, bạn cần cho công cụ truy vấn biết cách xác định công cụ nào sẽ được so sánh để tìm ra giá trị tối đa.
Bạn đã yêu cầu nó nhóm theo id
cột. Có nghĩa là nó sẽ so sánh các bản ghi có cùng id
và cung cấp cho bạn giá trị tối đa cho mỗi id
duy nhất . Vì mọi bản ghi đều có một id
khác nhau , về cơ bản bạn đã không làm bất cứ điều gì với điều khoản đó.
Nó đã nhóm tất cả các bản ghi với một id
trong tổng số 1
(là một bản ghi duy nhất) và trả lại bản ghi có id
tối đa từ nhóm đó (chính là bản ghi đó). Nó cũng làm như vậy đối với 2
, 3
, v.v.
Trong trường hợp ba cột được hiển thị ở đây, nơi duy nhất hợp lý để nhóm các bản ghi của bạn sẽ là trên test_id
cột. Một cái gì đó như thế này:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Điều này sẽ nhóm chúng theo test_id
, vì vậy kết quả sẽ bao gồm các bản ghi 6 (id
tối đa cho test_id
0), 4 (id
tối đa cho test_id
1) và 8 (id
tối đa cho test_id
2). Bằng cách chia các bản ghi thành ba nhóm dựa trên ba giá trị duy nhất trong test_id
, nó có thể tìm thấy một id
"tối đa" một cách hiệu quả trong mỗi nhóm.