Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan SQL Saya Menghasilkan Ralat 'Bukan Fungsi Kumpulan Satu Kumpulan'?

Mengapa Pertanyaan SQL Saya Menghasilkan Ralat 'Bukan Fungsi Kumpulan Satu Kumpulan'?

DDD
DDDasal
2024-12-23 16:30:17790semak imbas

Why Does My SQL Query Produce a

Memahami Ralat "Bukan Satu Kumpulan Kumpulan" dalam SQL

Dalam SQL, fungsi kumpulan satu kumpulan, seperti MAX(), SUM(), atau AVG(), digunakan pada kumpulan baris yang mempunyai nilai yang sama dalam lajur kumpulan yang ditentukan. Walau bagaimanapun, jika anda cuba memasukkan ungkapan lajur individu dalam senarai SELECT bersama-sama dengan fungsi kumpulan dan tidak memasukkan semua ungkapan tersebut dalam klausa GROUP BY, anda akan menghadapi ralat "bukan fungsi kumpulan tunggal".

Penjelasan Masalah

Dalam contoh pernyataan SQL anda dengan syarat:

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN

pertanyaan cuba mengira nilai maksimum jumlah MASA untuk setiap SSN unik dan kemudian mengembalikan SSN yang dikaitkan dengan nilai maksimum tersebut. Walau bagaimanapun, terdapat isu asas dengan pertanyaan ini:

  • Ungkapan MAX(SUM(TIME)) ialah fungsi kumpulan satu kumpulan yang mengira jumlah maksimum MASA untuk setiap SSN. Secara takrifan, ini bermakna terdapat hanya satu hasil untuk setiap SSN.
  • Memasukkan ungkapan lajur individu SSN dalam senarai SELECT melanggar peraturan bahawa semua ungkapan lajur individu yang disertakan dalam senarai SELECT juga mesti disertakan dalam KUMPULAN MENGIKUT klausa.

Resolusi

Untuk menyelesaikan perkara ini ralat, anda mempunyai tiga pilihan:

  • Lepaskan ungkapan lajur individu (SSN) daripada senarai PILIH: Ini akan memberi anda jumlah maksimum MASA tanpa SSN yang berkaitan.
  • Tambah ungkapan lajur individu (SSN) pada klausa GROUP BY: Ini akan mengumpulkan hasil mengikut kedua-dua SSN dan TIME, membolehkan anda mendapatkan semula SSN yang dikaitkan dengan jumlah maksimum TIME.
  • Gunakan subkueri: Anda boleh menggunakan subkueri untuk mendapatkan jumlah maksimum TIME dan kemudian menggunakan nilai itu dalam pertanyaan berasingan untuk mengenal pasti SSN yang berkaitan.

Contoh Pertanyaan menggunakan Pilihan 2

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN, TIME

Pertanyaan ini akan mengumpulkan hasil mengikut SSN dan TIME, membolehkan anda mendapatkan semula SSN yang dikaitkan dengan jumlah maksimum MASA untuk setiap SSN.

Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Menghasilkan Ralat 'Bukan Fungsi Kumpulan Satu Kumpulan'?. 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