Rumah  >  Soal Jawab  >  teks badan

Sebab lajur tidak sah dalam senarai pilih ialah ia tidak disertakan dalam fungsi agregat atau klausa GROUP BY

<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>
P粉517090748P粉517090748423 hari yang lalu620

membalas semua(2)saya akan balas

  • P粉155832941

    P粉1558329412023-08-24 13:38:21

    Jika anda menetapkan lumpuh dalam klausa ONLY_FULL_GROUP_BY 服务器模式(默认情况下),您的查询将在 MYSQL 中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY, contohnya

    SELECT col1, col2, SUM(col3) totalSUM
    FROM tableName
    GROUP BY col1, col2

    Lajur bukan agregat bermakna lajur tidak akan dihantar ke fungsi agregat, seperti SUMMAXCOUNT dsb.

    balas
    0
  • P粉090087228

    P粉0900872282023-08-24 10:30:14

    Andaikan saya mempunyai jadual berikutT:

    a   b
    --------
    1   abc
    1   def
    1   ghi
    2   jkl
    2   mno
    2   pqr

    Saya melaksanakan pertanyaan berikut:

    SELECT a, b
    FROM T
    GROUP BY a

    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:

    SELECT a, MAX(b) AS x
    FROM T
    GROUP BY a

    Sekarang jelas anda mahukan hasil berikut:

    a   x
    --------
    1   ghi
    2   pqr

    balas
    0
  • Batalbalas