Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Isih mengikut Tarikh dan Masa sebelum Menghimpunkan mengikut Nama dalam MySQL?
Mengurus Isih dan Pengelompokan dalam MySQL: Menggabungkan ORDER BY dan GROUP BY untuk Keputusan Tertentu
Dalam MySQL, mencapai pengisihan dan pengelompokan yang diingini data boleh mencabar apabila susunan operasi bercanggah. Soalan ini membentangkan senario di mana matlamatnya adalah untuk mengisih data mengikut tarikh dan masa sebelum mengumpulkannya mengikut nama.
Seperti yang diterangkan oleh pengguna, pendekatan standard menggunakan ORDER BY date ASC, masa ASC diikuti dengan GROUP BY nama gagal kerana GROUP BY mesti mendahului ORDER BY dalam pertanyaan. Untuk menyelesaikan konflik ini, jawapannya menyediakan dua kaedah alternatif:
Kaedah 1: Subquery
Kaedah pertama melibatkan penggunaan subquery untuk mencapai susunan yang diingini sebelum mengumpulkan:
<code class="sql">SELECT * FROM ( SELECT * FROM table_name ORDER BY date ASC, time ASC ) AS sub GROUP BY name</code>
Subkueri ini mencipta jadual sementara, sub, yang mengandungi data yang diisih mengikut tarikh dan masa. Pertanyaan utama kemudian mengumpulkan jadual sementara ini mengikut nama, mencapai hasil yang diingini.
Kaedah 2: Menggunakan Ungkapan Jadual Biasa (CTE)
Kaedah lain, biasanya digunakan dengan MySQL versi 8.0 dan ke atas, adalah untuk mencipta Common Table Expression (CTE) untuk melaksanakan pengisihan dan pengumpulan:
<code class="sql">WITH sorted_data AS ( SELECT * FROM table_name ORDER BY date ASC, time ASC ) SELECT * FROM sorted_data GROUP BY name</code>
CTE, sorted_data, mencapai hasil yang sama seperti subquery dengan mencipta jadual sementara dengan data yang diisih, yang kemudiannya digunakan dalam pertanyaan utama untuk mengumpulkan.
Atas ialah kandungan terperinci Bagaimana untuk Isih mengikut Tarikh dan Masa sebelum Menghimpunkan mengikut Nama dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!