Sql server 为客户提供顶级产品中的特定产品
我有一个查询,可以得到这样一个客户的产品数量Sql server 为客户提供顶级产品中的特定产品,sql-server,Sql Server,我有一个查询,可以得到这样一个客户的产品数量 SELECT top(4) count([Product]) as p , Product FROM CustomerProducts WHERE CustomerID = '123' GROUP BY Product ORDER BY p desc 这是有效的,会给我举个例子,也会给我举个例子 154 Bike 100 Truck 90 Tracktor 80 Buggy 现在我需要让所有拥有自行车
SELECT top(4)
count([Product]) as p
, Product
FROM CustomerProducts
WHERE CustomerID = '123'
GROUP BY Product
ORDER BY p desc
这是有效的,会给我举个例子,也会给我举个例子
154 Bike
100 Truck
90 Tracktor
80 Buggy
现在我需要让所有拥有自行车的客户进入前4名。我尝试用一个子查询来实现这一点,但没有成功
SELECT CustomerID
WHERE Product
EXISTS IN {customers top 4 products}
这是我试图实现的查询您可以通过应用程序来实现,但是,如果它是一个大表,请不要在生产中运行类似的查询,因为这可能是一个非常繁重的查询
此外,未测试查询。但应该有效
SELECT cp.CustomerID
FROM CustomerProducts cp
CROSS APPLY (
SELECT TOP 4 xp.Product, count(*)
FROM CustomerProducts xp
WHERE xp.CustomerId = cp.CustomerId
GROUP BY xp.Product
ORDER BY COUNT(*) DESC
) xrp
WHERE xrp.Product = 'Bike'
使用窗口功能:
SELECT
CustomerId
FROM
(
SELECT
CustomerID
,Product
,RANK() OVER (PARTITION BY CustomerId ORDER BY COUNT(*) DESC) AS ProductRank
FROM
CustomerProducts
GROUP BY
CustomerID
,Product
) ProductSummary
WHERE
ProductRank <= 4
AND Product = 'Bike'
您可能需要使用密集的排名,这取决于您想要如何定义前4名