mysql统计课程表中的总学分,最大学分,最小学分,平均分及课程的个数,所有的通过聚合函数统计出的字段都给出相应的别名
时间: 2023-07-15 14:13:33 浏览: 70
可以使用如下的 SQL 语句来统计课程表中的总学分、最大学分、最小学分、平均分及课程的个数:
```sql
SELECT
COUNT(*) AS course_count,
SUM(credit) AS total_credit,
MAX(credit) AS max_credit,
MIN(credit) AS min_credit,
AVG(credit) AS avg_credit
FROM
course_table;
```
其中,`COUNT(*)` 统计课程表中的记录数,即课程的个数;`SUM(credit)` 统计所有课程的学分之和;`MAX(credit)` 统计所有课程的最大学分;`MIN(credit)` 统计所有课程的最小学分;`AVG(credit)` 统计所有课程的平均学分。通过 `AS` 关键字,可以为每个聚合函数指定一个别名,以便于查询结果的理解和使用。
相关问题
mysql创建一个存储函数avg_func,通过游标统计指定课程的平均分。
好的,以下是创建存储函数 `avg_func` 的 MySQL 代码:
```sql
DELIMITER $$
CREATE FUNCTION avg_func(course_name varchar(255)) RETURNS FLOAT
BEGIN
DECLARE sum_score FLOAT;
DECLARE count_score INT;
DECLARE avg_score FLOAT;
DECLARE score FLOAT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT score FROM scores WHERE course = course_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET sum_score = 0;
SET count_score = 0;
OPEN cur;
get_score: LOOP
FETCH cur INTO score;
IF done THEN
LEAVE get_score;
END IF;
SET sum_score = sum_score + score;
SET count_score = count_score + 1;
END LOOP;
CLOSE cur;
IF count_score > 0 THEN
SET avg_score = sum_score / count_score;
ELSE
SET avg_score = 0;
END IF;
RETURN avg_score;
END$$
DELIMITER ;
```
这个函数接受一个参数 `course_name`,用于指定要统计平均分的课程名称。它使用一个游标来遍历 `scores` 表中指定课程的所有成绩,累加总分并计算平均分。如果指定课程没有成绩记录,则返回 0。
使用方法示例:
```sql
SELECT avg_func('math') AS avg_math_score;
```
这将返回一个名为 `avg_math_score` 的列,其中包含数值型的平均分。你可以将 'math' 替换为其他课程名称,以获取不同课程的平均分。
7. mysql统计所有课程都及格的,并且平均分大于80分的所有学生的成绩
可以通过下列SQL语句实现:
```sql
SELECT s.student_id, AVG(s.score) as avg_score
FROM scores s
WHERE s.course_id NOT IN (
SELECT c.course_id
FROM courses c
WHERE c.min_score > 60
)
GROUP BY s.student_id
HAVING avg_score > 80;
```
这里假设成绩表为 `scores`,包含 `student_id`、`course_id`、`score` 三个字段,课程表为 `courses`,包含 `course_id`、`course_name`、`min_score` 三个字段。其中 `courses.min_score` 表示该门课程及格的最低分数线(假设均为60分),如果某个学生所有选修的课程都及格并且平均分大于80分,则该学生的成绩记录会被统计在查询结果中。