Informix 自定义函数中SQL之乱象,请指教

AllenWang 发布于 2014/01/15 20:27
阅读 221
收藏 0

函数脚本:

create function getAvgScore(v_in_usercode char(8)) returning decimal(18,2);

define total integer;
define total_score decimal(18,2);
select count(*) into total from evaluate_record a,evaluated_user b 
where a.evaluated_code=b.usercode and b.usercode=v_in_usercode;
if total < 5 then 
    return null;
end if;
let total = total -4;
select sum(c.score) into total_score from(
select skip 2 first total a.score from evaluate_record a,evaluated_user b 
where a.evaluated_code=b.usercode and b.usercode = v_in_usercode order by a.score
) c;
return round(total_score / total,2);
end function;


--------------------------------------------------------------------------------

需求描述:evaluate_record  为评分记录表,evaluated_user未被评分人表

输入参数被评分人代码,输出参数:该评分人的最终得分

评分计算规则,去掉两个最高分和两份最低分,其他的为有效得分,有效得分的平均分为该被评分人的最终得分

-------------------------------------------------------------------------------------

测试数据:

evaluate_record表

id evaluated_code evaluator_ip score     

1 12345678 32.1.23.170 95
2 12345678 32.1.23.171 95
3 12345678 32.1.23.172 88
4 12345678 32.1.23.173 88
5 12345678 32.1.23.174 88
6 12345678 32.1.23.175 88
7 12345678 32.1.23.176 88
8 12345678 32.1.23.177 88
9 12345678 32.1.23.178 60
10 12345678 32.1.23.179 55
11 87654321 32.1.23.170 11
12 87654321 32.1.23.171 22
13 87654321 32.1.23.172 33
14 87654321 32.1.23.173 44
15 87654321 32.1.23.174 55
16 87654321 32.1.23.175 66
17 87654321 32.1.23.176 77

evaluated_user

id usercode comcode

1 12345678 32000000
2 87654321 32000000


------------------------------------------------------------------------------

问题描述,计算12345678 的得分是正确的,计算87654321 的得分不正确,把两个最高分也算进去了

加载中
0
AllenWang
AllenWang

修正:

evaluated_user为被评分人表

评分计算规则,去掉两个最高分和两个最低分,其他的为有效得分,有效得分的平均分为该被评分人的最终得分

返回顶部
顶部