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
Lepaskan: 2024-12-23 16:30:17
asal
771 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan