SQL GROUP BY
Ralat lajur tidak sah dalam pertanyaan
Apabila memilih lajur dalam pertanyaan SQL yang mengandungi klausa GROUP BY
, ralat mungkin berlaku jika lajur tidak disertakan dalam fungsi agregat mahupun dalam klausa GROUP BY
. Ralat ini biasanya kelihatan seperti: "Lajur 'Employee.EmpID' tidak sah dalam senarai pilih kerana ia tidak disertakan dalam fungsi agregat mahupun dalam klausa GROUP BY
".
Sebab untuk ini adalah peraturan nilai tunggal. Dalam pertanyaan GROUP BY
, output untuk lajur tidak teragregat mestilah unik dalam setiap kumpulan. Walau bagaimanapun, memilih satu lajur tanpa mengagregatkannya, seperti 'Employee.EmpID', menghasilkan hasil yang tidak jelas.
Untuk menyelesaikan ralat ini, masukkan lajur dalam klausa GROUP BY
atau gunakan fungsi agregat padanya. Contohnya, jika anda ingin mengira bilangan pekerja bagi setiap lokasi, gunakan pertanyaan berikut:
<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>
Pertanyaan ini mengira bilangan pekerja di setiap lokasi sambil masih memberikan ID lokasi untuk setiap kumpulan. Sebagai alternatif, jika anda ingin memilih semua lajur untuk setiap lokasi tetapi hanya menunjukkan ID pekerja terkini (nilai maksimum), anda boleh menggunakan fungsi agregat MAX
:
<code class="language-sql">SELECT loc.LocationID, MAX(emp.EmpID) AS LatestEmployeeID FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY loc.LocationID</code>
Dengan menggunakan fungsi agregat atau memasukkan lajur dalam klausa GROUP BY
, anda boleh memastikan bahawa data yang diambil adalah jelas dan mematuhi peraturan nilai tunggal.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL SELECT Saya dengan GROUP BY Mengembalikan Ralat 'Lajur Tidak Sah'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!