feat: update structure
This commit is contained in:
79
cs2102/labs/tutorials/tut06-ans.sql
Normal file
79
cs2102/labs/tutorials/tut06-ans.sql
Normal file
@@ -0,0 +1,79 @@
|
||||
CREATE OR REPLACE FUNCTION max_min(IN stu_id INT, OUT max_cid INT, OUT min_cid INT)
|
||||
RETURNS RECORD AS
|
||||
$$
|
||||
DECLARE
|
||||
max_score INT;
|
||||
min_score INT;
|
||||
BEGIN
|
||||
SELECT e.score, e.cid
|
||||
INTO max_score, max_cid
|
||||
FROM exams e
|
||||
WHERE stu_id = e.sid
|
||||
AND e.score = (SELECT MAX(score)
|
||||
FROM exams
|
||||
where stu_id = sid);
|
||||
SELECT e.score, e.cid
|
||||
INTO min_score, min_cid
|
||||
FROM exams e
|
||||
WHERE stu_id = e.sid
|
||||
AND e.score = (SELECT MIN(score)
|
||||
FROM exams
|
||||
where stu_id = sid);
|
||||
|
||||
IF max_score = min_score THEN
|
||||
min_cid = NULL;
|
||||
END IF;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION revised_avg(IN stu_id INT, OUT r_avg FLOAT)
|
||||
RETURNS FLOAT AS
|
||||
$$
|
||||
DECLARE
|
||||
max_score INT;
|
||||
min_score INT;
|
||||
sum_score FLOAT;
|
||||
count_score INT;
|
||||
BEGIN
|
||||
SELECT MAX(score), MIN(score), SUM(score), COUNT(score)
|
||||
INTO max_score, min_score, sum_score, count_score
|
||||
FROM exams
|
||||
WHERE sid = stu_id;
|
||||
|
||||
if count_score < 3 THEN
|
||||
r_avg := NULL;
|
||||
ELSE
|
||||
r_avg := (sum_score - max_score - min_score) / (count_score - 2);
|
||||
end if;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION list_r_avg()
|
||||
RETURNS TABLE
|
||||
(
|
||||
stu_id INT,
|
||||
ravg FLOAT
|
||||
)
|
||||
AS
|
||||
$$
|
||||
DECLARE
|
||||
curs CURSOR FOR (SELECT sid, score
|
||||
FROM Exams
|
||||
ORDER BY sid);
|
||||
r RECORD;
|
||||
/* add other variables here */
|
||||
BEGIN
|
||||
/* write your code here */
|
||||
stu_id := -1;
|
||||
OPEN curs;
|
||||
LOOP
|
||||
FETCH curs INTO r;
|
||||
if r.sid <> "".stu_idOR NOT FOUND THEN
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
CLOSE curs;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
Reference in New Issue
Block a user