Dalam SQL, klausa GROUP BY membenarkan kami mengumpulkan data berdasarkan satu atau lebih lajur dan mendapatkan hasil agregat. Walau bagaimanapun, anda mungkin menghadapi gelagat yang berbeza apabila menggunakan klausa ini dalam MySQL dan PostgreSQL, mengakibatkan ralat "Lajur 'the_table.col3' mesti muncul dalam klausa GROUP BY atau digunakan sebagai fungsi agregat" dalam PostgreSQL.
Fungsi pengagregatan seperti MIN(), MAX(), COUNT(), dan SUM() membolehkan kami menggabungkan berbilang nilai ke dalam satu hasil. Fungsi ini sering digunakan dengan klausa GROUP BY untuk mengira statistik ringkasan bagi setiap kumpulan.
MySQL membenarkan tafsiran santai peraturan GROUP BY, membenarkan lajur bukan agregat muncul dalam senarai pilihan walaupun ia tidak disertakan dalam klausa GROUP BY. Tingkah laku ini boleh membawa kepada nilai yang tidak ditentukan kerana MySQL boleh sewenang-wenangnya memilih nilai untuk setiap kumpulan.
Sebaliknya, PostgreSQL mematuhi piawaian SQL dengan ketat. Apabila menggunakan klausa GROUP BY, ia memerlukan semua lajur bukan agregat dalam senarai pilih mesti disertakan dalam klausa GROUP BY atau digunakan dalam fungsi agregat.
Untuk menyelesaikan ralat dalam PostgreSQL, kita perlu menggunakan fungsi agregat untuk mengira statistik ringkasan bagi setiap lajur pengelompokan. Sebagai contoh, kita boleh menggunakan pertanyaan berikut:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
Walaupun pendekatan MySQL memberikan fleksibiliti, ia boleh menghasilkan nilai yang tidak ditentukan. Penguatkuasaan ketat standard SQL PostgreSQL memastikan keputusan agregat adalah konsisten dan boleh diramal. Apabila menggunakan klausa GROUP BY dalam PostgreSQL, amalan terbaik adalah sentiasa memasukkan lajur bukan agregat dalam klausa GROUP BY atau menggunakan fungsi agregat.
Atas ialah kandungan terperinci MySQL lwn. PostgreSQL GROUP BY: Mengapa Ralat 'mesti muncul dalam GROUP BY clause'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!