Sebab lajur tidak sah dalam senarai pilih ialah ia tidak disertakan dalam fungsi agregat atau klausa GROUP BY
P粉517090748
2023-08-23 14:36:31
<p>Saya menerima ralat - </p>
<blockquote>
<p>Lajur 'Pekerja.EmpID' tidak sah dalam senarai pilih kerana ia
Tidak termasuk dalam fungsi agregat atau klausa GROUP BY. </p>
</blockquote>
<hr />
<pre class="brush:php;toolbar:false;">pilih loc.LocationID, emp.EmpID
daripada Pekerja sebagai pekerja sertai penuh Lokasi sebagai lokasi
pada emp.LocationID = loc.LocationID
kumpulan mengikut loc.LocationID</pre>
<p>Situasi ini sepadan dengan jawapan yang diberikan oleh Bill Karwin. </p>
<p>Pembetulan ke atas, jawapan yang sesuai untuk ExactaBox - </p>
<pre class="brush:php;toolbar:false;">pilih loc.LocationID, count(emp.EmpID) -- not count(*), tidak mahu mengira null
daripada Pekerja sebagai pekerja sertai penuh Lokasi sebagai lokasi
pada emp.LocationID = loc.LocationID
kumpulan mengikut loc.LocationID</pre>
<hr />
<p><strong>Soalan asal -</strong></p>
<p>Untuk pertanyaan SQL -</p>
<pre class="brush:php;toolbar:false;">pilih *
daripada Pekerja sebagai pekerja sertai penuh Lokasi sebagai lokasi
pada emp.LocationID = loc.LocationID
kumpulan mengikut (loc.LocationID)</pre>
<p>Saya tidak faham mengapa ralat ini berlaku. Apa yang saya mahu lakukan ialah menyertai jadual dan kemudian kumpulkan semua pekerja di lokasi tertentu bersama-sama. </p>
<p><strong>Saya rasa saya telah menjelaskan sebahagian masalah saya. Beritahu saya jika anda boleh -</strong>
<p>Untuk mengumpulkan semua pekerja yang bekerja di lokasi yang sama, kami mesti menyebut LocationID terlebih dahulu. </p>
<p>Maka kami tidak boleh/tidak menyebut setiap ID pekerja di sebelahnya. Sebaliknya kami menyebut jumlah bilangan pekerja di lokasi iaitu kami harus SUM() pekerja yang bekerja di lokasi tersebut. Saya tidak pasti mengapa kita akan pergi ke arah yang terakhir.
Jadi ini menerangkan bahagian ralat "ia tidak terkandung dalam salah satu fungsi agregat". </p>
<p>Apakah penjelasan untuk bahagian <strong><kod>KUMPULAN OLEH</kod></strong> </p>
Jika anda menetapkan lumpuh dalam klausa
ONLY_FULL_GROUP_BY
服务器模式(默认情况下),您的查询将在MYSQL
中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY
, contohnyaLajur bukan agregat bermakna lajur tidak akan dihantar ke fungsi agregat, seperti
SUM
、MAX
、COUNT
dsb.Andaikan saya mempunyai jadual berikut
T
:Saya melaksanakan pertanyaan berikut:
Output hendaklah mempunyai dua baris, satu untuk
a=1
,第二行为a=2
.Tetapi apakah nilai b yang perlu ditunjukkan dalam dua baris ini? Terdapat tiga kemungkinan untuk setiap kes, dan tiada apa-apa dalam pertanyaan menjelaskan nilai yang hendak dipilih untuk b dalam setiap kumpulan. Maknanya sangat kabur.
Ini menunjukkan Peraturan Nilai Tunggal yang melarang mendapat hasil yang tidak ditentukan apabila menjalankan pertanyaan KUMPULAN OLEH dan termasuk mana-mana kriteria lajur dalam senarai pilih yang bukan sebahagian daripada kumpulan dan tidak muncul dalam fungsi agregat (SUM, MIN , MAX, dsb. .).
Membetulkannya mungkin kelihatan seperti ini:
Sekarang jelas anda mahukan hasil berikut: