Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan SQL Saya Melemparkan Ralat 'Lajur Tidak Sah dalam Senarai Pilihan' Berkaitan dengan GROUP BY?

Mengapa Pertanyaan SQL Saya Melemparkan Ralat 'Lajur Tidak Sah dalam Senarai Pilihan' Berkaitan dengan GROUP BY?

Barbara Streisand
Barbara Streisandasal
2025-01-23 01:21:10301semak imbas

Why Does My SQL Query Throw a

Ralat pertanyaan SQL: Lajur tidak sah dalam senarai PILIH kerana ia tidak mematuhi fungsi agregat atau klausa GROUP BY

Apabila melaksanakan pertanyaan SQL, anda mungkin menghadapi ralat berikut:

<code>Column 'Column_Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.</code>

Sebab ralat ini adalah seperti berikut:

Pengumpulan data

Dalam klausa KUMPULAN OLEH, baris dengan nilai lajur yang sama ditentukan untuk dikumpulkan bersama. Contohnya, dalam pertanyaan berikut:

<code>SELECT loc.LocationID, emp.EmpID
FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID
GROUP BY loc.LocationID</code>

Pekerja dikumpulkan mengikut LocationID mereka. Walau bagaimanapun, jika anda cuba memasukkan lajur dalam senarai PILIH yang tiada dalam klausa KUMPULAN OLEH (contohnya, emp.EmpID), anda akan mendapat ralat ini kerana ia tidak dapat ditentukan EmpID yang sepatutnya dipilih untuk setiap nilai kumpulan.

Fungsi pengagregatan

Fungsi pengagregatan seperti SUM, COUNT, MAX dan MIN) boleh digunakan untuk mendapatkan maklumat ringkasan untuk data terkumpul . Jika anda memasukkan lajur bukan agregat dalam senarai SELECT tetapi ia bukan sebahagian daripada klausa KUMPULAN OLEH, anda mesti menggunakan fungsi agregat padanya.

Sebagai contoh, jika anda ingin mengira bilangan pekerja bagi setiap lokasi, anda akan menggunakan:

<code>SELECT loc.LocationID, COUNT(emp.EmpID)
FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID
GROUP BY loc.LocationID</code>

Ini memastikan bahawa untuk setiap lokasi, hanya kiraan pekerja dikembalikan, bukannya senarai ID pekerja individu.

Penyelesaian

Untuk menyelesaikan ralat ini anda mesti:

  • Tambah lajur pada klausa GROUP BY: Ini juga akan mengumpulkan data berdasarkan lajur tambahan.
  • Gunakan fungsi agregat pada lajur dalam senarai PILIH: Ini akan mengira maklumat ringkasan untuk setiap kumpulan berdasarkan lajur bukan agregat.

Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Melemparkan Ralat 'Lajur Tidak Sah dalam Senarai Pilihan' Berkaitan dengan GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn