Menyelesaikan masalah "Lajur Tidak Dalam Agregat atau Kumpulan Mengikut Klausa" Ralat SQL
Panduan ini menangani ralat SQL biasa: "Lajur 'Employee.EmpID' tidak sah dalam senarai pilih kerana ia tidak terkandung dalam fungsi agregat atau klausa GROUP BY." Ralat ini timbul apabila pernyataan SELECT anda termasuk lajur yang tidak diagregatkan mahupun sebahagian daripada klausa GROUP BY.
Memahami Fungsi Agregat dan KUMPULAN OLEH
A GROUP BY
klausa mengumpulkan baris dengan nilai yang sama dalam lajur yang ditentukan. Untuk memaparkan data daripada kumpulan ini, anda biasanya menggunakan fungsi agregat seperti SUM
, COUNT
, AVG
, MIN
atau MAX
. Fungsi ini mengira nilai ringkasan untuk setiap kumpulan.
Peraturan Nilai Tunggal
Peraturan nilai tunggal SQL menetapkan bahawa mana-mana lajur tidak teragregat dalam senarai SELECT mesti mempunyai nilai tunggal yang konsisten dalam setiap kumpulan. Jika lajur tidak teragregat memegang berbilang nilai bagi setiap kumpulan, pertanyaan adalah samar-samar, kerana SQL tidak dapat menentukan nilai yang hendak dikembalikan.
Menyelesaikan Ralat
Katakan matlamat anda adalah untuk menyenaraikan ID Lokasi dan kiraan pekerja di setiap lokasi. Pertanyaan yang diperbetulkan menggunakan COUNT
fungsi agregat:
<code class="language-sql">SELECT loc.LocationID, COUNT(emp.EmpID) AS EmployeeCount FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY loc.LocationID;</code>
COUNT(emp.EmpID)
mengira bilangan pekerja bagi setiap LocationID
. Ini memastikan satu EmployeeCount
nilai bagi setiap kumpulan, memenuhi peraturan nilai tunggal dan menghapuskan ralat. Klausa GROUP BY loc.LocationID
mengumpulkan hasil mengikut lokasi.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Menghasilkan Ralat 'Lajur Bukan Agregat atau Kumpulan Mengikut Klausa'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!