1

我有以下 2 个表:

在此处输入图像描述

我想创建一个程序/函数,在其中输入 USERID 后,我将能够获得他们的排名。排名基于总排名点乘以代币除以用户获得的总代币。

Rank 数值等效如下:SU = 25,EX = 9,VG = 5,G = 3,F = 1

例如,根据我的数据,userid 45 的排名是 = [25(4) + 3(5)]/4 + 5 = 12.77(这将是我的输出)

这是我的尝试......我搞砸了数学部分,它只显示“用户排名是:”(空白/排名没有价值)

create or replace procedure rank
(para_userid IN number, para_ranking OUT number)
is
    n number;
    rank number;
    r number;
CURSOR c1(uid number) IS 
        select decode(rank, 'SU', 25, 'EX', 9, 'VG', 5, 'G', 3, 'F',1) FROM A
            WHERE para_userid= uid;    
begin
        n := 0;
        para_ranking := 0;
        OPEN c1(para_userid);
        LOOP 
            FETCH c1 INTO rank; 
            EXIT WHEN c1%NOTFOUND;     
            r := r * rank; 
            n := n + 1; 
        END LOOP; 
        IF n > 0 THEN 
            para_ranking := r / n; 
        END IF; 
        CLOSE c1; 
    END; 


declare 
x number;
begin
rank(45, x);
DBMS_OUTPUT.PUT_LINE('User Ranking is: '||x);
end;
/
4

1 回答 1

2

这是获取所有用户排名的查询。将其限制为单个用户并将其放入过程中应该很简单:

Select
    a.userid,
    Sum(decode(a.rank, 'SU', 25, 'EX', 9, 'VG', 5, 'G', 3, 'F',1) * b.tokens)
        / sum(b.tokens) ranking
From
    A
        inner join
    B
        on a.GameID = b.GameID
group by
    a.userid
于 2013-11-02T12:13:16.480 回答