我必须创建一个查询来查找每家商店销售的前 80% 的产品。有没有办法使用窗口函数来做到这一点?我的表是具有以下列的事务数据集:
StoreID | ProductID | NoOfProducts | SoldDate
对于一家商店,如果销售 100 种不同的产品COUNT(DISTINCT(ProductID))
,我希望得到该商店的 80 种产品的结果集。我怎么能这样做?(我的数据库环境是 SQL Server 2008)
我必须创建一个查询来查找每家商店销售的前 80% 的产品。有没有办法使用窗口函数来做到这一点?我的表是具有以下列的事务数据集:
StoreID | ProductID | NoOfProducts | SoldDate
对于一家商店,如果销售 100 种不同的产品COUNT(DISTINCT(ProductID))
,我希望得到该商店的 80 种产品的结果集。我怎么能这样做?(我的数据库环境是 SQL Server 2008)
像这样的东西应该使用ROW_NUMBER()
然后使用COUNT
每个商店来确定要显示的行。这将始终显示按 ProductId 排序的前 80%:
SELECT
t.StoreId,
t.ProductId,
t.rn
FROM (
SELECT StoreId,
ProductId,
ROW_NUMBER() OVER (Partition BY StoreId ORDER BY ProductId) rn
FROM YourTable ) t JOIN (
SELECT StoreId,
COUNT(DISTINCT ProductId) cnt
FROM YourTable
GROUP BY StoreId
) t2 on t.StoreId = t2.StoreId
WHERE t.rn <= (t2.cnt*.8)