如何在MySQL Workbench或命令行环境下?

在MySQL Workbench或命令行环境下,创建学生成绩汇总视图score_group_view,提供每位学生考试成绩最高的选课信息,要求显示的视图字段包括学生学号(s_no)、姓名(s_name)、课程号(c_no)、课程名(c_name)、考试成绩(total_score)。其中,总成绩按照——平时成绩平时成绩比重+考试成绩(1-平时成绩比重)公式计算。

以下是在MySQL Workbench或命令行环境下创建学生成绩汇总视图score_group_view的步骤:

  1. 首先,在MySQL Workbench或命令行环境下连接到数据库,并选择要创建视图的数据库。
  2. 接着,使用以下SQL语句创建视图:
CREATE VIEW score_group_view AS
SELECT s.s_no, s.s_name, sc.c_no, c.c_name,
((sc.usual_score * c.usual_percentage) + (sc.exam_score * (1 - c.usual_percentage))) AS total_score
FROM student s, score sc, course c
WHERE s.s_no = sc.s_no AND sc.c_no = c.c_no AND
(sc.c_no, sc.s_no, ((sc.usual_score * c.usual_percentage) + (sc.exam_score * (1 - c.usual_percentage)))) IN
(SELECT sc1.c_no, sc1.s_no, MAX((sc1.usual_score * c1.usual_percentage) + (sc1.exam_score * (1 - c1.usual_percentage)))
FROM score sc1, course c1
WHERE sc1.c_no = c1.c_no
GROUP BY sc1.c_no, sc1.s_no);

  1. 上述SQL语句中,我们通过联结三个表student、score和course来获取学生成绩的详细信息,并使用公式计算每位学生的总成绩。其中,MAX函数用于获取每位学生考试成绩最高的选课信息,GROUP BY子句用于按课程和学生分组聚合数据。
  2. 最后,我们将上述查询结果保存为名为score_group_view的视图。该视图包含学生学号(s_no)、姓名(s_name)、课程号(c_no)、课程名(c_name)、考试成绩(total_score)等字段,满足要求。

以上是在MySQL Workbench或命令行环境下创建学生成绩汇总视图score_group_view的详细步骤和相关SQL语句,希望对您有帮助。

该回答引用chatgpt:
在MySQL Workbench中可以通过以下步骤创建学生成绩汇总视图:

首先,在MySQL Workbench中连接到你的MySQL数据库。
然后,在“Schema”面板中选择要创建视图的数据库。
在左侧面板中,展开“Tables”选项卡,然后右键单击要用来创建视图的表,选择“Send to SQL Editor”>“Create View”。
在“SQL Editor”中,你将看到自动生成的SQL语句,其中包含表的所有列。你需要编辑这个SQL语句来创建你的视图。
在编辑器中,你可以定义你的视图并编写查询语句,例如:

CREATE VIEW score_group_view AS
SELECT s.s_no, s.s_name, c.c_no, c.c_name, 
((s.regular_score * c.regular_weight) + (s.exam_score * (1 - c.regular_weight))) AS total_score
FROM student AS s
JOIN score AS sc ON s.s_no = sc.s_no
JOIN course AS c ON sc.c_no = c.c_no
WHERE (s.s_no, sc.score) IN (
    SELECT s_no, MAX(score) FROM score GROUP BY s_no
)


在这个查询语句中,我们使用了JOIN来连接学生表、成绩表和课程表,然后使用子查询来选择每个学生的最高分,并计算每个学生的总成绩。

编辑完成后,点击工具栏上的“Execute”按钮来创建你的视图。
在命令行环境下,可以使用以下命令来创建学生成绩汇总视图:


CREATE VIEW score_group_view AS
SELECT s.s_no, s.s_name, c.c_no, c.c_name, 
((s.regular_score * c.regular_weight) + (s.exam_score * (1 - c.regular_weight))) AS total_score
FROM student AS s
JOIN score AS sc ON s.s_no = sc.s_no
JOIN course AS c ON sc.c_no = c.c_no
WHERE (s.s_no, sc.score) IN (
    SELECT s_no, MAX(score) FROM score GROUP BY s_no
);

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    解决方案:

    1. 创建视图(score_group_view)并提供每位学生考试成绩最高的选课信息:
    CREATE VIEW score_group_view AS
    SELECT s_no, s_name, c_no, c_name, MAX(exam_score) AS total_score
    FROM score
    GROUP BY s_no, c_no;
    
    1. 根据平时成绩比重来计算总成绩,通过添加计算字段来实现:
    CREATE VIEW score_group_view AS
    SELECT s_no, s_name, c_no, c_name, MAX(exam_score) AS exam_score, 
        (0.5 * MAX(class_score) + 0.5 * MAX(lab_score)) AS other_score,
        (0.5 * MAX(class_score) + 0.5 * MAX(lab_score)) * 0.6 + MAX(exam_score) * 0.4 AS total_score
    FROM score
    GROUP BY s_no, c_no;
    

    其中,0.5是平时成绩比重,0.6是平时成绩与考试成绩的权重比例,0.4是考试成绩的权重。

    注意:根据题目要求,每位学生只需要提供每门课程的最高成绩,因此我们只需要在GROUP BY的时候按照学号和课程号进行分组即可。

    1. 可以在MySQL Workbench中使用视图设计器来创建视图,如图所示:

    MySQL Workbench视图设计器截图

    1. 也可以使用命令行来创建视图,如下所示:
    mysql> CREATE VIEW score_group_view AS
        -> SELECT s_no, s_name, c_no, c_name, MAX(exam_score) AS exam_score, 
        ->     (0.5 * MAX(class_score) + 0.5 * MAX(lab_score)) AS other_score,
        ->     (0.5 * MAX(class_score) + 0.5 * MAX(lab_score)) * 0.6 + MAX(exam_score) * 0.4 AS total_score
        -> FROM score
        -> GROUP BY s_no, c_no;
    

    参考链接:


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^