Mysql 获取视图查询结果后将函数应用于视图

Mysql 获取视图查询结果后将函数应用于视图,mysql,relational-database,stored-functions,Mysql,Relational Database,Stored Functions,我有一个名为results的表,其结构如下: --------------------------------- | id_test | id_student | result | --------------------------------- 其中id\u测试(INT),id\u学生(INT),结果(INT介于0和100之间(包括100)) 任务是基于表创建一个视图,计算结果列的统计信息(截止值为50),并将它们添加到视图的另一列中 我创建了一个存储函数,用于计算结果的特定统计信息: F

我有一个名为results的表,其结构如下:

---------------------------------
| id_test | id_student | result |
---------------------------------
其中
id\u测试(INT)
id\u学生(INT)
结果(INT介于0和100之间(包括100))

任务是基于表创建一个视图,计算结果列的统计信息(截止值为50),并将它们添加到视图的另一列中

我创建了一个存储函数,用于计算结果的特定统计信息:

FUNCTION `calc_stat`(student INT, test INT, res INT) RETURNS float
BEGIN
    declare tests INT;
    declare totaltestamount INT unsigned DEFAULT 35;
    declare weighted_res FLOAT;
    declare maxres INT;

select max(result) into maxres 
from results
where results.id_student = student;

select count(*) into tests 
from results
where results.id_test = test;

set weighted_res = res/maxres*tests/totaltestamount;

return weighted_res;
END 
以及以下观点:

create view `statistics` as
    select `id_test` AS `id_test`, `id_student` AS `id_student`, `result` AS `result`,calc_stat(`id_student`, `id_test`,`result`) AS `statistics`
    from `results`

我唯一没有得到的部分是截止值,因为我不确定如何检索结果大于50的表,然后根据检索到的视图应用函数。有没有办法执行此操作?

如果只想显示结果大于50的行,请仅在视图中添加此选项:

create view `statistics` as
select `id_test` AS `id_test`, `id_student` AS `id_student`, `result` AS `result`,calc_stat(`id_student`, `id_test`,`result`) AS `statistics`
from `results` WHERE `result` > 50
如果要显示所有行,并且只对结果>50的记录应用该函数。向函数添加条件。像这样的

FUNCTION `calc_stat`(student INT, test INT, res INT) RETURNS float
BEGIN
declare tests INT;
declare totaltestamount INT unsigned DEFAULT 35;
declare weighted_res FLOAT;
declare maxres INT;

select max(result) into maxres 
from results
where results.id_student = student;

select count(*) into tests 
from results
where results.id_test = test;

set weighted_res = res/maxres*tests/totaltestamount;

if res < 50 then 
  set weighted_res = 0 //  or something 
end if

return weighted_res;
END 
函数'calc_stat'(学生整数、测试整数、恢复整数)返回浮点值
开始
声明测试为INT;
声明totaltestamount INT无符号默认值35;
宣布加权浮点数;
声明maxres INT;
在maxres中选择max(结果)
根据结果
其中results.id_student=学生;
选择count(*)进入测试
根据结果
其中results.id_test=测试;
设置加权分辨率=分辨率/最大分辨率*测试/总测试量;
如果res<50,则
设置加权_res=0//或其他
如果结束
收益加权;
结束

如果分辨率小于50,则设置加权分辨率=0//或者如果分辨率清晰,则设置为结束。我知道,但我想要的是检索>50的结果,然后对检索到的结果应用函数,考虑到这是整个表(不是它的一半)。如果结果<50,您想在视图的“统计”列中显示什么,首先,我想得到结果小于50的所有条目,并将检索到的结果作为整个数据集,计算统计数据。基本上,我已经实现了将条件添加到存储函数内的select子句中。