1

我正在网站上工作,我需要根据分数查找用户排名。之前我通过 sql query 计算用户的分数和排名。

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 的表中。我们可以做这样的事情吗?

4

1 回答 1

2

更好的解决方案是score在用户表中包含一个字段,或者有一个单独的分数表。每当您为用户添加新supopp、、或visited数据时,也会重新计算他​​们当时的分数。

然后要获得排名最高的用户,您将能够执行一个非常简单的select语句,按分数降序排序,并且只获取您想要的行数。它会非常快。

于 2012-12-14T12:21:23.170 回答