Memahami Fungsi Pengumpulan SQL: Menyelesaikan Ralat "bukan satu kumpulan kumpulan"
Dalam SQL, fungsi kumpulan seperti SUM( ) nilai agregat merentas berbilang baris, mengumpulkannya mengikut lajur tertentu. Walau bagaimanapun, apabila cuba menggabungkan fungsi kumpulan dengan ungkapan lajur individu dalam pernyataan SELECT, ralat "bukan fungsi kumpulan tunggal" timbul. Ralat ini berlaku apabila fungsi kumpulan beroperasi pada subset data dalam kumpulan yang sama dengan ungkapan lajur individu.
Untuk menyelesaikan isu ini, pertimbangkan pilihan berikut:
1 . Gugurkan Fungsi Kumpulan:
Mengalih keluar fungsi SUM() akan membatalkan nilai agregat, hanya meninggalkan ungkapan lajur individu.
2. Gugurkan Ungkapan Lajur Individu:
Menghapuskan lajur SSN daripada pernyataan SELECT akan menyelesaikan ralat dengan mengembalikan nilai jumlah maksimum.
3. Tambah Klausa GROUP BY Komprehensif:
Memasukkan semua ungkapan lajur individu dalam klausa GROUP BY memastikan setiap baris tergolong dalam kumpulan yang berbeza, sepadan dengan skop fungsi kumpulan. Walau bagaimanapun, pilihan ini mungkin tidak sesuai jika anda berhasrat untuk mengumpulkan mengikut berbilang lajur dan mempunyai nilai unik untuk setiap gabungan.
Pertanyaan Alternatif untuk Pendapatan:
Untuk yang diberikan tujuan mencari SSN pelanggan dengan muat turun maksimum, pertanyaan alternatif disyorkan:
SELECT TOP 1 SSN, SUM(TIME) AS TotalTime FROM downloads GROUP BY SSN ORDER BY TotalTime DESC;
Pertanyaan ini mendapatkan semula SSN dan jumlah masa muat turun untuk setiap SSN, diisih mengikut tertib menurun berdasarkan jumlah masa. Klausa TOP 1 mengehadkan keputusan kepada SSN dengan jumlah masa tertinggi.
Sebagai alternatif, jika berbilang pelanggan berkongsi jumlah masa maksimum yang sama, pertanyaan berikut boleh digunakan:
SELECT SSN, SUM(TIME) AS TotalTime FROM downloads GROUP BY SSN HAVING SUM(TIME) = (SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN);
Pertanyaan yang disemak ini mendapatkan semula semua SSN yang terikat untuk jumlah masa muat turun maksimum, memastikan tiada maklumat hilang.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'bukan fungsi kumpulan tunggal' dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!