我正在编写一个查询来检索我网站上购买最多书籍的最受欢迎用户。该数字应该是动态的,例如前 100 名、前 50 名或前 10 名用户。我为此目的写了下面的查询,但发现了一个问题:
DECLARE @TOPNumber INT
SET @TOPNumber = 10
SELECT
S.UserName,
S.Email,
TOPST.NumberOfPurchase
FROM
Subscriber S
JOIN
(
SELECT ROW_NUMBER() Over(order by [FK_Subscriber])as Slno, FK_Subscriber,COUNT(*) NumberOfPurchase FROM SubscriberPurchase
GROUP BY FK_Subscriber
--ORDER BY FK_Subscriber
) TOPST ON S.PK_SubscriberID = TOPST.FK_Subscriber AND TOPST.Slno <= @TOPNumber
ORDER BY TOPST.NumberOfPurchase DESC
如您所见,内部查询中的 ORDER BY 子句已被注释,因为我不能在那个地方使用它。如果可以,那么查询会给我想要的结果。
任何人都可以帮助如何做到这一点。我在数据库中有数百万条记录,因此需要适当的优化