Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan Ralat 'bukan fungsi kumpulan tunggal' dalam SQL?

Bagaimana untuk Menyelesaikan Ralat 'bukan fungsi kumpulan tunggal' dalam SQL?

Mary-Kate Olsen
Lepaskan: 2024-12-29 09:31:15
asal
600 orang telah melayarinya

How to Solve the

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan