Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Item N Teratas dengan Cekap untuk Setiap Kumpulan Menggunakan SQL GROUP BY?
Kumpulan SQL OLEH: Mengambil N Item Teratas untuk Setiap Kumpulan
Apabila bekerja dengan data dalam SQL, selalunya perlu mengumpulkan rekod berdasarkan kriteria umum dan melakukan pengiraan atau pengagregatan dalam setiap kumpulan. Di sinilah klausa GROUP BY memainkan peranan. Artikel ini membincangkan teknik hebat yang menggabungkan GROUP BY dengan fungsi ROW_NUMBER() untuk mendapatkan semula N item teratas untuk setiap kumpulan dengan cekap dalam satu pertanyaan.
Masalah: Item Terlaris Setiap Kedai
Pertimbangkan senario di mana kami mempunyai jadual Jualan dengan lajur UPCCode, SaleDate, StoreId dan TotalDollarSales. Tugasnya adalah untuk mengenal pasti 5 item terlaris di setiap kedai.
Pertanyaan:
Kami boleh mendekati masalah ini dengan berbilang pertanyaan individu menggunakan UNION, tetapi itu mungkin tidak cekap. Sebaliknya, pertanyaan berikut memanfaatkan subkueri dan fungsi ROW_NUMBER():
WITH s AS ( SELECT StoreID, UPCCode, tds, rn = ROW_NUMBER() OVER (PARTITION BY StoreID ORDER BY tds DESC) FROM ( SELECT StoreID, UPCCode, tds = SUM(TotalDollarSales) FROM Sales GROUP BY StoreID, UPCCode ) AS s2 ) SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn <= 5 ORDER BY StoreID, TotalDollarSales DESC;
Penjelasan:
Kesimpulan:
Pertanyaan SQL lanjutan ini membolehkan anda mengumpulkan item N teratas untuk setiap kumpulan dengan cekap, menangani senario pemprosesan data biasa dengan elegan dan meningkatkan kemahiran pengoptimuman pertanyaan anda.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Item N Teratas dengan Cekap untuk Setiap Kumpulan Menggunakan SQL GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!