1

スコアに基づいてユーザーのランクを見つける必要がある Web サイトに取り組んでいます。以前、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日々増加し、Web サイトの速度が低下するため、上記のクエリを使用できません。

必要なのは、上記のクエリでデータを選択し、スコアという名前の別のテーブルに挿入することです。このようなことはできますか?

4

1 に答える 1

2

より良い解決策はscore、ユーザー テーブルにフィールドとして含めるか、スコア用に別のテーブルを用意することです。supユーザーの新しい、opp、またはデータを追加するたびにvisited、その時点でスコアも再計算します。

select次に、最高ランクのユーザーを取得するために、スコアの降順で並べ替え、必要な行数のみを取得するという非常に単純なステートメントを実行できます。とても速いです。

于 2012-12-14T12:21:23.170 に答える