2017-06-15 39 views
0
DELIMITER $ 
CREATE FUNCTION MAXSCOREID(START_STUDENT_ID INT, END_STUDENT_ID INT) 
RETURNS INT 
BEGIN 
DECLARE STUDENT_ID INT; 
BEGIN 
    SELECT MAX(SCORE) INTO STUDENT_ID 
    FROM STUDENT ST, SCORE S 
    WHERE ST.STUDENT_ID = S.STUDENT_ID 
    AND ST.STUDENT_ID BETWEEN 1 AND 10; 
END; 
RETURN student_id; 
END$ 
DELIMITER ; 

嗨。使用上面的功能,我可以得到更高的分数,但是我想获得最高分的学生ID。请帮忙吗?sql,sql中的函数

+0

此外,您对变量使用不一致的大小写,而不使用输入参数。 – miken32

+0

你可以确定它运作良好。谢谢。 –

回答

0

您可以用下面的更换你的函数体:

SELECT ST.STUDENT_ID INTO student_id 
FROM STUDENT ST 
LEFT JOIN SCORE S USING (STUDENT_ID) 
WHERE ST.STUDENT_ID BETWEEN 1 AND 10 
HAVING MAX(SCORE); 

它使用MAX()功能的集合形式。我建议重新设计你的函数来区分变量名和列名;我还建议使用小写字母列名,以使您的代码更易于阅读!

1

该查询将产生具有最高分数的学生组。

select student_id 
from score 
where score = (select max(score) from score); 
+0

它自己工作,但是当我把它放入函数时,它返回null。 –

+0

您的函数被声明为返回一个int(即单个学生),但可能有多个学生的最高分数。您必须更改函数才能返回一组学生,或者修改您的过程以适应让多名学生获得最高分数的可能性。 –