Memahami "Bukan Fungsi Kumpulan Tunggal Kumpulan" dalam SQL
Apabila cuba menggabungkan fungsi kumpulan dengan ungkapan lajur individu dalam SELECT kenyataan, seperti dalam pertanyaan yang disediakan:
SELECT SSN, MAX(SUM(TIME)) FROM downloads GROUP BY SSN
Anda mungkin menghadapi "bukan satu kumpulan ralat fungsi kumpulan". Ini berlaku kerana fungsi kumpulan SUM(TIME) mengira nilai tunggal untuk setiap kumpulan (SSN), menjadikannya tidak serasi dengan ungkapan lajur individu SSN.
Untuk menyelesaikan ralat ini, anda mempunyai beberapa pilihan:
Alih keluar Lajur Individu Ungkapan:
SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN
Ini hanya akan mengembalikan nilai jumlah maksimum tanpa SSN yang sepadan.
Tambah KUMPULAN MENGIKUT Klausa untuk Semua Lajur Ungkapan:
SELECT SSN, MAX(SUM(TIME)) FROM downloads GROUP BY SSN, TIME
Ini akan mengumpulkan hasil mengikut SSN dan TIME, menjadikan fungsi MAX(SUM(TIME)) sah.
Gunakan Subquery Agregat:
SELECT SSN, SUM(TIME) FROM downloads GROUP BY SSN HAVING SUM(TIME) = (SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN)
Subquery ini mengira nilai jumlah maksimum dan memilih hanya baris di mana JUMLAH(MASA) untuk setiap SSN sepadan dengannya maksimum.
Bergantung pada keperluan khusus anda, salah satu daripada penyelesaian ini akan membolehkan anda memperoleh hasil yang diingini tanpa menghadapi ralat "bukan fungsi kumpulan tunggal".
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!