Apabila membuat pertanyaan yang merangkumi klausa WHERE, adalah mungkin untuk mengehadkan syarat kepada yang khusus padang. Dalam kes anda, anda cuba memaparkan medan userHabilitado untuk setiap kursus, ditapis oleh pengguna tertentu. Walau bagaimanapun, pertanyaan yang diberikan tidak termasuk klausa WHERE yang dikehendaki.
Sebelum MySQL 5.7, tetapan yang dikenali sebagai ONLY_FULL_GROUP_BY telah dilumpuhkan secara lalai. Ini membenarkan kumpulan mengikut klausa digabungkan dengan lajur tidak teragregat (NON AGGS) yang bukan sebahagian daripada kumpulan oleh. Akibatnya, pertanyaan mungkin mengembalikan data yang salah atau samar-samar.
Dalam MySQL 5.7 dan lebih baru, ONLY_FULL_GROUP_BY didayakan secara lalai. Ini memerlukan semua NON AGGS untuk disertakan dalam kumpulan mengikut klausa, mengelakkan ketidaktepatan data.
Pertimbangkan contoh pertanyaan berikut:
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS usuarios, MAX(IF(usuarios.userID = 70, cursosUsuarios.userHabilitado, NULL)) AS userHabilitado FROM cursos LEFT JOIN cursosUsuarios ON cursos.cursoID = cursosUsuarios.cursoID LEFT JOIN usuarios ON cursosUsuarios.userID = usuarios.userID WHERE cursos.estadoCurso = 'abierto' GROUP BY cursos.cursoID;</code>
Pertanyaan ini menggunakan MAX(IF()) berfungsi untuk mesyaratkan pengagregatan medan userHabilitado. Ia menyemak sama ada usuarios.userID sepadan dengan ID pengguna yang disediakan (70) dan mengembalikan nilai userHabilitado yang sepadan, jika tidak, ia mengembalikan NULL. Dengan memasukkan MAX() dalam klausa GROUP BY, kami dapat mengekalkan hasil agregat bersyarat untuk setiap cursoID.
Atas ialah kandungan terperinci Bagaimana untuk Memohon Klausa WHERE ke Medan Khusus dalam MySQL Apabila Menggunakan GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!