Penjelasan terperinci tentang PostgreSQL GROUP BY ralat
Apabila menanyakan jadual pangkalan data menggunakan klausa GROUP BY
dalam PostgreSQL, semua lajur yang disertakan dalam senarai SELECT
tetapi tidak diagregatkan mesti muncul dalam klausa GROUP BY
atau digunakan sebagai argumen kepada fungsi agregat. Ralat ini berlaku apabila cuba mengumpulkan mengikut lajur tertentu (seperti col2
), tetapi pernyataan SELECT
mengandungi lajur lain yang tidak diagregatkan (seperti col3
dan col1
).
Fungsi pengagregatan
Fungsi pengagregatan membolehkan kami meringkaskan berbilang baris data. Fungsi agregat biasa termasuk:
COUNT
(Kira rekod)SUM
(mengira jumlah lajur)MIN
(Cari nilai minimum)MAX
(Cari nilai maksimum)AVG
(kira purata)Perbezaan dalam GROUP BY pemprosesan antara MySQL dan PostgreSQL
MySQL mengendalikan klausa GROUP BY
secara berbeza daripada PostgreSQL. Dalam MySQL, walaupun senarai SELECT
mengandungi lajur tidak teragregat yang tidak muncul dalam klausa GROUP BY
, ia masih dibenarkan. Walau bagaimanapun, nilai yang dikembalikan oleh lajur ini boleh berubah sewenang-wenangnya antara rekod, yang membawa kepada potensi ketidakkonsistenan.
Sebaliknya, PostgreSQL mematuhi piawaian SQL dengan ketat, menghendaki lajur tidak teragregat mesti disertakan dalam klausa GROUP BY
atau digunakan sebagai argumen untuk mengagregatkan fungsi.
Penyelesaian
Untuk menyelesaikan ralat ini dalam PostgreSQL, tulis semula pertanyaan untuk menggunakan fungsi agregat pada lajur tidak teragregat. Contohnya:
<code class="language-sql">SELECT col2, MIN(col3) AS min_col3, MIN(col1) AS min_col1 FROM the_table GROUP BY col2;</code>
Pertanyaan ini menggunakan fungsi agregat MIN
untuk mendapatkan nilai minimum col2
dan col3
dalam setiap kumpulan yang ditakrifkan oleh col1
.
Dengan menggunakan fungsi agregat, pertanyaan memastikan bahawa nilai yang dikembalikan adalah konsisten dan mematuhi keperluan klausa PostgreSQL GROUP BY
.
Atas ialah kandungan terperinci Mengapa Pertanyaan PostgreSQL Saya dengan Klausa GROUP BY Melemparkan Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!