Dalam hal menggunakan MAX() GROUP BY klausa dasarnya memberitahu mesin kueri bagaimana mengelompokkan item dari mana untuk menentukan maksimum. Dalam contoh pertama Anda, Anda hanya memilih satu kolom, jadi tidak perlu pengelompokan. Tetapi dalam contoh kedua Anda, Anda memiliki banyak kolom. Jadi, Anda perlu memberi tahu mesin kueri cara menentukan mana yang akan dibandingkan untuk menemukan maksimum.
Anda menyuruhnya untuk mengelompokkan dengan id kolom. Yang berarti akan membandingkan record yang memiliki id yang sama dan memberi Anda satu maksimum untuk setiap id unik . Karena setiap record memiliki id yang berbeda , Anda pada dasarnya tidak melakukan apa pun dengan klausa itu.
Itu mengelompokkan semua catatan dengan id dari 1 (yang merupakan satu record), dan mengembalikan record dengan maksimum id dari kelompok itu (yang merupakan catatan itu). Itu melakukan hal yang sama untuk 2 , 3 , dll.
Dalam kasus tiga kolom yang ditampilkan di sini, satu-satunya tempat yang masuk akal untuk mengelompokkan catatan Anda adalah di test_id kolom. Sesuatu seperti ini:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Ini akan mengelompokkannya berdasarkan test_id , sehingga hasilnya akan menyertakan record 6 (maksimal id untuk test_id 0), 4 (maksimum id untuk test_id 1), dan 8 (maksimum id untuk test_id 2). Dengan membagi record menjadi tiga grup berdasarkan tiga nilai unik di test_id kolom, secara efektif dapat menemukan id "maksimum" dalam setiap grup.