Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Item N Teratas dengan Cekap untuk Setiap Kumpulan Menggunakan SQL GROUP BY?

Bagaimana untuk Mendapatkan Item N Teratas dengan Cekap untuk Setiap Kumpulan Menggunakan SQL GROUP BY?

Barbara Streisand
Barbara Streisandasal
2024-12-23 12:06:17226semak imbas

How to Efficiently Retrieve the Top N Items for Each Group Using SQL's 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:

  1. Subkueri bersarang (s2) mengumpulkan Jualan data oleh StoreID dan UPCCode dan mengira jumlah jualan (td) untuk setiap satu gabungan.
  2. Subkueri utama (s) membungkus s2 dan memperkenalkan fungsi ROW_NUMBER(). Fungsi ini memberikan nombor jujukan (rn) kepada setiap rekod dalam setiap partition (StoreID).
  3. Dalam pertanyaan akhir, kami menapis baris yang rn kurang daripada atau sama dengan 5 (iaitu, 5 rekod teratas untuk setiap partition) dan ekstrak StoreID, UPCCode dan TotalDollarSales untuk setiap yang layak. item.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn