Fasal GROUP BY
PostgreSQL: Menyelesaikan Ralat Biasa
Tingkah laku ketat GROUP BY
PostgreSQL sering membawa kepada ralat: "column "the_table.col3" mesti muncul dalam klausa GROUP BY atau digunakan dalam fungsi agregat." Artikel ini menjelaskan tingkah laku ini dan menyediakan penyelesaian.
Memahami Fungsi Agregat dalam SQL
Fungsi agregat, seperti MIN
, MAX
, SUM
, COUNT
dan AVG
, meringkaskan data dalam kumpulan. Mereka menghasilkan satu hasil daripada berbilang nilai input.
PostgreSQL GROUP BY
Ralat Dijelaskan
Ralat timbul apabila klausa GROUP BY
digunakan tanpa fungsi agregat yang sesuai. Pertanyaan cuba mengumpulkan baris berdasarkan lajur tidak teragregat (cth., col2
) sambil memilih lajur bukan teragregat lain (col3
, col1
) yang bukan sebahagian daripada kumpulan itu. PostgreSQL menuntut semua lajur bukan teragregat yang dipilih sama ada dalam klausa GROUP BY
atau diproses oleh fungsi agregat.
PostgreSQL lwn. MySQL GROUP BY
Pengendalian
MySQL GROUP BY
kurang ketat. Ia mungkin membenarkan pemilihan lajur tidak teragregat yang tidak terdapat dalam klausa GROUP BY
, tetapi ini boleh mengakibatkan nilai yang tidak dapat diramalkan, terutamanya jika lajur tersebut mempunyai nilai yang berbeza-beza dalam kumpulan. Tingkah laku ini tidak mematuhi SQL standard.
Membetulkan PostgreSQL GROUP BY
Pertanyaan
Untuk membetulkan ralat PostgreSQL, gunakan fungsi agregat pada semua lajur bukan agregat dalam senarai SELECT
. Contohnya:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
Pertanyaan yang disemak ini memastikan pengumpulan yang tepat dan mengira nilai minimum untuk col3
dan col1
dalam setiap kumpulan.
Amalan Terbaik dan Piawaian SQL
Sentiasa gunakan fungsi agregat dengan GROUP BY
untuk menjamin ketekalan data dan hasil yang boleh diramal. Ini sejajar dengan standard SQL92, yang mewajibkan lajur tidak teragregat dalam senarai SELECT
mestilah sama ada dalam klausa GROUP BY
atau bergantung secara fungsi pada lajur pengumpulan.
Atas ialah kandungan terperinci Mengapa PostgreSQL Memerlukan Lajur Bukan Agregat dalam GROUP BY atau Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!