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

Cara memperbaiki grup kueri dengan only_full_group_by

Ini adalah kesalahan umum untuk pengguna MySQL. Di MySQL 5.7, secara default database menerapkan semantik standar yang telah diterapkan oleh sebagian besar database SQL lainnya selama bertahun-tahun.

Aturannya adalah setiap kolom dalam daftar pilihan Anda harus salah satu dari:

  • Dinamakan dalam klausa GROUP BY; yaitu apa yang Anda kelompokkan.
  • Di dalam fungsi agregat seperti MIN, MAX(), SUM(), GROUP_CONCAT(), dll.
  • Secara fungsional bergantung pada kolom tempat Anda mengelompokkan (ini adalah ekstensi MySQL untuk perilaku SQL standar, dan database SQL lainnya belum tentu mendukung ini).

Dalam kueri Anda (saya akan memperluas SELECT * . Anda ):

select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key

Anda mengelompokkan berdasarkan feature_key, tetapi ini berarti kolom lain tidak mematuhi aturan yang saya jelaskan di atas.

Berikut cara memperbaikinya:

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key

Tampaknya berlebihan menggunakan MAX(user_id) karena hanya ada satu nilai yang mungkin berdasarkan kondisi klausa WHERE. Tapi tidak ada salahnya juga. MIN(user_id) juga akan bekerja.

Lihat juga jawaban saya sebelumnya pada kesalahan yang sama ini:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DataTable dengan Ajax tidak berfungsi dengan baik setelah menggunakan serverSide:true

  2. Hitung huruf kapital dalam String

  3. Permintaan MySql untuk memilih catatan dengan tanggal tertentu

  4. UTF-8:Umum? Tempat sampah? Unikode?

  5. Kegagalan tautan komunikasi, Spring Boot + MySql + Docker + Hibernate