Rumah >pangkalan data >tutorial mysql >Mengapakah Klausa ORDER BY Digunakan Selepas Klausa GROUP BY dalam MySQL?
Pesanan MySQL sebelum Kumpulan Oleh
Dalam MySQL, apabila melaksanakan pertanyaan yang melibatkan klausa ORDER BY dan GROUP BY, adalah penting untuk diperhatikan bahawa klausa ORDER BY digunakan selepas klausa GROUP BY. Ini bermakna bahawa hasil pertama dikumpulkan dan kemudian diisih, yang mungkin bukan tingkah laku yang diingini.
Masalah:
Pertimbangkan pertanyaan berikut:
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' GROUP BY wp_posts.post_author ORDER BY wp_posts.post_date DESC
Pertanyaan ini bertujuan untuk mendapatkan semula catatan terkini untuk setiap pengarang dan mengumpulkan hasil mengikut pengarang. Walau bagaimanapun, klausa ORDER BY digunakan selepas klausa GROUP BY, menyebabkan keputusan dipesan selepas pengumpulan telah berlaku.
Penyelesaian:
Untuk menangani perkara ini isu, pertanyaan boleh diubah suai untuk melaksanakan susunan sebelum pengumpulan:
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' ORDER BY wp_posts.post_date DESC GROUP BY wp_posts.post_author
Pertanyaan yang disemak ini mula-mula memesan keputusan mengikut tarikh pos dalam tertib menurun sebelum melaksanakan pengumpulan mengikut pengarang. Hasilnya ialah siaran terkini untuk setiap pengarang akan diambil dan diletakkan dahulu dalam set hasil.
Penyelesaian Alternatif (untuk Pangkalan Data Bukan MySQL):
Dalam pangkalan data yang tidak menyokong pesanan sebelum mengumpulkan, seperti SQL Server dan PostgreSQL, penyelesaian alternatif boleh digunakan:
SELECT wp_posts.* FROM wp_posts JOIN ( SELECT g.post_author MAX(g.post_date) AS post_date FROM wp_posts AS g WHERE g.post_status='publish' AND g.post_type='post' GROUP BY g.post_author ) AS t ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date
Pertanyaan ini menggunakan subkueri untuk mengenal pasti tarikh siaran maksimum bagi setiap pengarang dan kemudian menyertai ini keputusan ditetapkan dengan jadual wp_posts utama untuk mendapatkan semula data siaran sebenar. Harap maklum bahawa penyelesaian ini mungkin mengembalikan berbilang baris untuk pengarang dengan berbilang siaran pada tarikh yang sama, jadi penapisan tambahan mungkin diperlukan bergantung pada keperluan khusus.
Atas ialah kandungan terperinci Mengapakah Klausa ORDER BY Digunakan Selepas Klausa GROUP BY dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!