用sql语言:创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。调用这个函数,生成相应的报表并给用户浏览。(多语句表值函数)
时间: 2024-03-17 09:41:47 浏览: 40
好的,以下是用SQL语言创建一个用户自定义函数的示例代码:
```
CREATE OR REPLACE FUNCTION generate_report()
RETURNS TABLE (
course_id INT,
course_name VARCHAR(50),
enroll_count INT,
max_score DECIMAL(5,2),
min_score DECIMAL(5,2),
avg_score DECIMAL(5,2)
)
AS $$
DECLARE
temp_table TABLE (
course_id INT,
course_name VARCHAR(50),
enroll_count INT,
max_score DECIMAL(5,2),
min_score DECIMAL(5,2),
avg_score DECIMAL(5,2)
);
BEGIN
INSERT INTO temp_table
SELECT
c.course_id,
c.course_name,
COUNT(e.student_id) AS enroll_count,
MAX(s.score) AS max_score,
MIN(s.score) AS min_score,
AVG(s.score) AS avg_score
FROM
courses c
LEFT JOIN enrollments e ON c.course_id = e.course_id
LEFT JOIN scores s ON e.enrollment_id = s.enrollment_id
GROUP BY
c.course_id,
c.course_name;
RETURN QUERY SELECT * FROM temp_table;
END;
$$ LANGUAGE plpgsql;
```
这个函数以多语句表值函数的方式实现,首先定义了一个临时表 `temp_table`,然后在函数体内使用 SQL 语句查询所需的报表数据,并将结果插入到临时表中。最后,使用 `RETURN QUERY` 返回临时表中的数据作为函数的结果集。
要调用这个函数,只需要使用以下 SQL 语句即可:
```
SELECT * FROM generate_report();
```
这将返回一个包含每门课程的统计信息的结果集。
阅读全文