我正在网站上工作,我需要在分数的基础上找到用户的等级。之前我正在通过SQL查询计算用户的得分和排名。
select * from (
select
usrid,
ROW_NUMBER()
OVER(ORDER BY (count(*)+sum(sup)+sum(opp)+sum(visited)*0.3) DESC) AS rank,
(count(*)+sum(sup)+sum(opp)+sum(visited)*0.3 ) As score
from [DB_].[dbo].[dsas]
group by usrid) as cash
where usrid=@userid
请不要专注于查询,因为这只是为了解释我如何选择数据。
问题:现在我无法使用上述查询,因为每次使用排名时都需要从dsas
表中选择排名,dsas
表的数据会逐日增加并减慢我的网站速度
我需要的是通过上面的查询选择数据并插入另一个名为score的表中。我们可以这样做吗?
答案 0 :(得分:2)
更好的解决方案是在您的用户表中包含score
作为字段,或者为分数设置单独的表。每当您为用户添加新的sup
,opp
或visited
数据时,也会在当时重新计算其得分。
然后,为了获得排名最高的用户,您将能够执行非常简单的select
语句,按分数降序排序,并且只能获取所需的行数。它会非常快。