-
Ya. Kolom non-agregat adalah kolom apa pun yang tidak menggunakan fungsi agregasi seperti
MAX,COUNT,SUM,GROUP_CONCAT, dll. -
Kolom
asecara fungsional bergantung pada kolombjika nilaibmenyiratkan nilai tertentua. Ini biasanya berarti bahwabadalah kunci unik untuk tabel, danaadalah beberapa kolom lain dalam tabel itu. -
Secara unik ditentukan oleh sama dengan ketergantungan fungsional.
-
Alternatifnya adalah membuat daftar semua kolom yang tidak diagregasi di
GROUP BYdaftar:GROUP BY a.Z, a.Y, a.X.
Alasan untuk semua ini adalah ketika Anda memilih kolom yang tidak ada dalam GROUP BY list, mereka akan berasal dari baris arbitrer di baris yang dikelompokkan. Hal ini menyebabkan banyak kesalahan umum. Misalnya, kesalahan umum adalah menulis:
SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id
dan mengharapkan ip_address berisi alamat login terbaru untuk setiap pengguna. Tapi itu benar-benar akan berisi apa saja dari alamat yang mereka masuki, bukan dari baris dengan MAX(timestamp) . Lihat SQL Pilih hanya baris dengan Nilai Maks pada Kolom
cara yang benar untuk melakukannya.
Pengecualian ketergantungan fungsional biasanya berguna dengan gabungan.
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
Sejak user_id adalah kunci utama users tabel, secara unik menentukan user_name , jadi tidak perlu mencantumkannya secara eksplisit di GROUP BY .