Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL - Memilih Kolom bukan di Grup By

Memang benar bahwa fitur ini mengizinkan beberapa kueri yang ambigu, dan secara diam-diam mengembalikan kumpulan hasil dengan nilai arbitrer yang diambil dari kolom itu. Dalam praktiknya, nilai dari baris dalam grup cenderung disimpan terlebih dahulu secara fisik.

Kueri ini tidak ambigu jika Anda hanya memilih kolom yang secara fungsional bergantung pada kolom dalam kriteria GROUP BY. Dengan kata lain, jika hanya ada satu nilai berbeda dari kolom "ambigu" per nilai yang mendefinisikan grup, tidak ada masalah. Kueri ini akan ilegal di Microsoft SQL Server (dan ANSI SQL), meskipun secara logis tidak dapat menghasilkan ambiguitas:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;

Selain itu, MySQL memiliki mode SQL untuk membuatnya berperilaku sesuai standar:ONLY_FULL_GROUP_BY

FWIW, SQLite juga mengizinkan klausa GROUP BY yang ambigu ini, tetapi ia memilih nilai dari terakhir baris dalam grup.

Setidaknya dalam versi yang saya uji. Apa artinya menjadi sewenang-wenang adalah bahwa baik MySQL atau SQLite dapat mengubah implementasinya di masa mendatang, dan memiliki beberapa perilaku yang berbeda. Karena itu Anda tidak boleh bergantung pada perilaku yang tetap seperti itu saat ini dalam kasus-kasus ambigu seperti ini. Lebih baik untuk menulis ulang pertanyaan Anda menjadi deterministik dan tidak ambigu. Itulah mengapa MySQL 5.7 sekarang mengaktifkan ONLY_FULL_GROUP_BY secara default.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tips Berguna untuk Memecahkan Kesalahan Umum di MySQL

  2. hasilkan hari dari rentang tanggal

  3. SQL Query untuk menunjukkan tanggal terdekat?

  4. Apa itu kardinalitas di MySQL?

  5. Alternatif Meja Kerja MySQL - Manajemen Konfigurasi ClusterControl