SQL Group BY:為每個群組取得前N 個項目
在SQL 中處理資料時,通常需要依照下列條件對記錄進行分組共同標準並在每個組內執行計算或聚合。這就是 GROUP BY 子句發揮作用的地方。本文討論了一種強大的技術,它將 GROUP BY 與 ROW_NUMBER() 函數結合,以在單一查詢中有效地檢索每個群組的前 N 個商品。
問題:每個商店最暢銷的商品
考慮一個場景,其中我們有一個Sales 表,其中包含UPCCode、SaleDate、StoreId 和列總銷售額。任務是確定每個商店中銷量最高的 5 件商品。
查詢:
我們可以使用 UNION 透過多個單獨的查詢來解決這個問題,但這可能不會要有效率。相反,以下查詢利用子查詢和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;
解釋:
結論:
這個進階SQL 查詢可讓您有效地收集每個群組的前N 個項目,優雅地處理常見的資料處理場景並增強您的查詢最佳化技能。
以上是如何使用SQL的GROUP BY高效率檢索每個群組的前N項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!