Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menghijrahkan MySQL GROUP OLEH Pertanyaan ke PostgreSQL Dengan Betul?

Bagaimana untuk Menghijrahkan MySQL GROUP OLEH Pertanyaan ke PostgreSQL Dengan Betul?

Patricia Arquette
Lepaskan: 2025-01-11 08:26:40
asal
653 orang telah melayarinya

How to Migrate MySQL GROUP BY Queries to PostgreSQL Correctly?

Perbezaan antara pernyataan GROUP BY antara PostgreSQL dan MySQL

Pengenalan

Apabila memindahkan pertanyaan daripada MySQL ke PostgreSQL, anda sering menghadapi ralat apabila menggunakan klausa GROUP BY. Artikel ini akan menyelami perbezaan antara GROUP BY dalam MySQL dan PostgreSQL dan menyediakan cara untuk menyelesaikan ralat ini.

Ralat

Apabila melaksanakan pertanyaan berikut dalam PostgreSQL:

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

PostgreSQL mungkin mengembalikan ralat berikut:

<code>ERROR: column "availables.id" must appear in the GROUP BY clause or be used in an aggregate function</code>
Salin selepas log masuk

Perbezaan

Dalam MySQL, klausa GROUP BY membenarkan medan bukan agregat tertentu untuk disertakan dalam hasil pertanyaan. Walau bagaimanapun, PostgreSQL mengikut standard SQL dan memerlukan semua medan bukan agregat mesti muncul dalam klausa GROUP BY atau digunakan dalam fungsi agregat.

Penyelesaian: DISTINCT ON

Untuk mensimulasikan kelakuan MySQL GROUP BY dalam PostgreSQL, kita boleh menggunakan ungkapan DISTINCT ON. DISTINCT ON membolehkan kami memilih baris unik bagi setiap kumpulan berdasarkan lajur yang ditentukan. Dalam contoh yang diberikan, pertanyaan berikut akan berfungsi dalam PostgreSQL:

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

Pertanyaan ini akan mengembalikan baris ke untuk setiap nilai unik availables.bookdate, mensimulasikan gelagat GROUP BY MySQL dengan berkesan. Ambil perhatian bahawa untuk memastikan hasil yang konsisten, kami menambah availables.updated_at pada klausa ORDER BY supaya DISTINCT ON sentiasa memilih baris yang sama. Tanpa ini, DISTINCT ON boleh mengembalikan baris yang berbeza setiap kali ia dilaksanakan.

Atas ialah kandungan terperinci Bagaimana untuk Menghijrahkan MySQL GROUP OLEH Pertanyaan ke PostgreSQL Dengan Betul?. 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