Perbezaan dalam GROUP BY antara PostgreSQL dan MySQL
Terdapat perbezaan dalam sintaks GROUP BY MySQL dan PostgreSQL, yang sering membawa kepada ralat seperti "Lajur X mesti muncul dalam klausa GROUP BY".
KUMPULAN MYSQL OLEH tingkah laku
Dalam MySQL, pertanyaan berikut akan mengembalikan satu baris untuk setiap nilai unik dalam lajur tarikh buku:
<code class="language-sql">SELECT `availables`.* FROM `availables` INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24') GROUP BY availables.bookdate ORDER BY availables.updated_at</code>
KUMPULAN MENGIKUT keperluan untuk PostgreSQL
Walau bagaimanapun, dalam PostgreSQL, lajur yang tidak disertakan secara eksplisit dalam klausa GROUP BY atau digunakan dalam fungsi agregat mestilah sebahagian daripada kunci utama. Dalam pertanyaan di atas, availables.id tidak disertakan dalam GROUP BY mahupun digunakan dalam pengagregatan, sekali gus menyebabkan ralat.
Simulasikan tingkah laku MySQL
Untuk mensimulasikan tingkah laku MySQL GROUP BY dalam PostgreSQL, anda boleh menggunakan DISTINCT ON dan bukannya GROUP BY:
<code class="language-sql">SELECT DISTINCT ON (availables.bookdate) availables.* FROM availables INNER JOIN rooms ON rooms.id = availables.room_id WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24') ORDER BY availables.bookdate, availables.updated_at</code>
DISTINCT ON memastikan keunikan lajur yang ditentukan sambil mengekalkan susunan yang dinyatakan dalam klausa ORDER BY. Sintaks ini mensimulasikan keupayaan MySQL untuk mengembalikan satu baris rekod dengan nilai unik dalam lajur tarikh buku.
Atas ialah kandungan terperinci PostgreSQL lwn MySQL GROUP OLEH: Bagaimana Mencapai Gelagat Pengelompokan MySQL dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!