GROUP BY
memetakan grup baris ke satu baris, per nilai yang berbeda dalam spesifik kolom, yang bahkan tidak harus ada di daftar pilih.
SELECT b, c, d FROM table1 GROUP BY a;
Kueri ini adalah SQL legal (koreksi: hanya di MySQL; sebenarnya itu bukan SQL standar dan tidak didukung oleh merek lain). MySQL menerimanya, dan percaya bahwa Anda tahu apa yang Anda lakukan, memilih b
, c
, dan d
dengan cara yang jelas karena mereka adalah dependensi fungsional a
.
Namun, Microsoft SQL Server dan merek lain tidak mengizinkan kueri ini, karena tidak dapat menentukan dependensi fungsional dengan mudah. edit: Sebaliknya, SQL standar mengharuskan Anda untuk mengikuti Aturan Nilai Tunggal , yaitu setiap kolom dalam daftar pilih harus diberi nama di GROUP BY
klausa atau menjadi argumen untuk fungsi yang ditetapkan.
Sedangkan DISTINCT
selalu melihat semua kolom di daftar pilih, dan hanya kolom itu. Adalah kesalahpahaman umum bahwa DISTINCT
memungkinkan Anda untuk menentukan kolom:
SELECT DISTINCT(a), b, c FROM table1;
Meskipun tanda kurung membuat DISTINCT
terlihat seperti panggilan fungsi, tidak. Ini adalah opsi kueri dan nilai berbeda di salah satu dari tiga bidang daftar pilih akan mengarah ke baris berbeda dalam hasil kueri. Salah satu ekspresi dalam daftar pilih ini memiliki tanda kurung di sekitarnya, tetapi ini tidak akan memengaruhi hasilnya.