使用SQL Group By 的每個群組的前N 項目
在資料庫中,GROUP BY 子句用於對表中的行進行分組基於一列或多列中的共同值。當與 SUM() 等聚合函數結合使用時,它可用於計算每個群組的統計資料。然而,在某些情況下,可能需要提取每組中的前 N 個商品。
解決此問題的一種方法是使用子查詢來計算每個商店中每個商品的總銷售額,然後排名他們在每個商店內。這可以透過使用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 )
子查詢建立一個包含三列的新表s:StoreID、UPCCode 和tds(總計美元銷售額)。它還包括一個排名列 rn,它為每一行提供其儲存中的排名。排名是使用 ROW_NUMBER() 函數產生的,並按 StoreID 欄位進行分割。
要提取每個商店銷量最高的 5 件商品,可以使用以下查詢:
SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn <= 5 ORDER BY StoreID, TotalDollarSales DESC;
此查詢從 s 表中選擇 rn 值小於或等於 5 的所有行。結果按每個商店內的 TotalDollarSales 降序排序。因此,輸出將包含 Sales 表中每個商店銷售排名前 5 的商品。該方法結合了 GROUP BY、聚合函數和排名的使用,可以在單一查詢中有效地檢索所請求的資料。
以上是如何使用 SQL 的 GROUP BY 子句取得每個群組的前 N 個項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!