请给我举一个例子,mysql创建一个过程,统计选课表(mess_xk)中每门课程的选课人数及平均成绩。现在表mess_xk已经存在,其中xk_id是课程编号,sc_id是学生编号,xk_sc是学生课程成绩,请举一个完整的例子,代码要求新手入门mysql。
时间: 2024-03-24 13:41:23 浏览: 90
mysql课堂案例.sql
好的,以下是一个例子:
首先,我们需要在MySQL中创建一个表`mess_xk`来存储选课信息。打开MySQL命令行或者使用MySQL客户端,输入以下代码:
```
CREATE TABLE `mess_xk` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`xk_id` int(11) NOT NULL,
`sc_id` int(11) NOT NULL,
`xk_sc` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
然后,我们需要向`mess_xk`表中插入一些数据作为测试数据。输入以下代码:
```
INSERT INTO `mess_xk` (`xk_id`, `sc_id`, `xk_sc`) VALUES (1, 1, 90), (1, 2, 80), (2, 1, 85), (2, 2, 90), (2, 3, 95), (3, 1, 75), (3, 3, 80), (4, 2, 70), (5, 1, 80), (5, 2, 85), (5, 3, 90), (5, 4, 95);
```
接下来,我们需要创建一个存储过程来实现统计选课表中每门课程的选课人数及平均成绩的功能。打开MySQL命令行或者使用MySQL客户端,输入以下代码:
```
DELIMITER $$
CREATE PROCEDURE `course_statistics`()
BEGIN
DECLARE course_name CHAR(50);
DECLARE total_selected INT;
DECLARE avg_score FLOAT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT DISTINCT xk_id FROM mess_xk;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TEMPORARY TABLE temp_table (
xk_id INT,
total_selected INT,
avg_score FLOAT
);
OPEN cur;
read_loop: LOOP
FETCH cur INTO course_name;
IF done THEN
LEAVE read_loop;
END IF;
SELECT COUNT(*) INTO total_selected FROM mess_xk WHERE xk_id = course_name;
SELECT AVG(xk_sc) INTO avg_score FROM mess_xk WHERE xk_id = course_name;
INSERT INTO temp_table (xk_id, total_selected, avg_score) VALUES (course_name, total_selected, avg_score);
END LOOP;
CLOSE cur;
SELECT * FROM temp_table;
DROP TEMPORARY TABLE temp_table;
END$$
DELIMITER ;
```
然后,我们就可以调用这个存储过程来统计选课表中每门课程的选课人数及平均成绩了。输入以下代码:
```
CALL course_statistics();
```
执行之后,就会输出每门课程的选课人数及平均成绩。
阅读全文