Memahami GROUP BY Tanpa Fungsi Agregat
Dalam SQL, pernyataan GROUP BY digunakan untuk mengumpulkan baris dalam jadual berdasarkan lajur yang ditentukan. Apabila menggunakan GROUP BY tanpa fungsi agregat, adalah penting untuk memahami cara ia beroperasi dan syarat yang diperlukan.
Pertimbangkan contoh berikut:
SELECT ename, sal FROM emp GROUP BY ename, sal;
Pertanyaan ini tidak akan mengembalikan sebarang baris kerana ia melanggar peraturan GROUP BY tanpa agregat fungsi:
Dalam kes ini, senarai SELECT mempunyai dua lajur (ename, sal), tetapi klausa GROUP BY mempunyai tiga (ename, sal, sal). Untuk membetulkan ini, alih keluar satu lajur sal daripada klausa GROUP BY:
SELECT ename, sal FROM emp GROUP BY ename;
Apabila anda memasukkan sal dalam senarai PILIH, ia menjadi lajur bukan KUMPULAN OLEH kerana ia tiada dalam klausa KUMPULAN OLEH. Memandangkan ia bukan fungsi agregat, ia mencetuskan ralat ORA-00979.
Membetulkan ini memerlukan sama ada menambah sal pada klausa GROUP BY atau menggunakan fungsi agregat padanya:
-- Add sal to the GROUP BY clause SELECT ename, MIN(sal), MAX(sal) FROM emp GROUP BY ename, sal; -- Use an aggregate function on sal SELECT ename, SUM(sal) FROM emp GROUP BY ename;
Memikirkan Di Sebalik Peraturan
Operasi GROUP BY menggabungkan baris dengan nilai yang sama dalam lajur GROUP BY, menghasilkan satu baris untuk setiap set nilai yang unik. Memasukkan lajur bukan KUMPULAN OLEH dalam senarai PILIH tanpa fungsi agregat mewujudkan kesamaran kerana tidak jelas cara memilih nilai perwakilan untuk setiap kumpulan.
Sebagai contoh, jika anda mempunyai jadual dengan lajur Nama dan Umur dan anda KUMPULAN MENGIKUT Nama, umur manakah yang perlu dipaparkan dalam keputusan untuk setiap nama? Dengan menggunakan fungsi agregat seperti MIN, MAX atau SUM, anda dengan jelas menyatakan cara mengendalikan lajur tersebut.
Atas ialah kandungan terperinci Bagaimanakah SQL GROUP BY Clause Berfungsi Tanpa Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!