mysql> select*from score; +-------------+--------+-------+-------+ | S_no | C_no | daily | final | +-------------+--------+-------+-------+ | 18122221320 | a01564 | 88 | 93 | | 18122221320 | c06108 | 92 | 90 | | 18122221320 | c08123 | 85 | 95 | | 18122221321 | c06108 | 70 | 82 | | 18122221321 | c08123 | 85 | 94 | | 18122221322 | a01327 | 53 | 50 | | 18122221322 | a01564 | 64 | 50 | | 18122221322 | c08123 | 60 | 64 | | 18122221323 | a01564 | 88 | 84 | | 18122221323 | c05103 | 85 | 86 | | 18122221324 | c05103 | 95 | 86 | | 18122221324 | c08123 | 77 | 81 | | 18122221325 | c05103 | 88 | 90 | +-------------+--------+-------+-------+ 13 rows in set (0.00 sec)(12)显示score表数据。数据符合查询选课在2门以上且各门课程结业成绩均高于85分的学生的学号及其总成绩,查询结果按总成绩降序列出;总成绩=sum( daily*0.3+final*0.7)。
-
P粉955425168
-
2023-10-19
20浏览
根据您提供的需求,以下是一个符合条件的查询语句:
SELECT S_no, SUM(final*0.7+daily*0.3) AS total_score
FROM score
WHERE C_no IN (SELECT C_no FROM score GROUP BY C_no HAVING COUNT(C_no) >= 2)
GROUP BY S_no
HAVING SUM(final*0.7+daily*0.3) > 85
ORDER BY total_score DESC;
这个查询语句首先使用子查询来筛选出选课在2门以上的学生,然后按照学号进行分组,并计算每个学生的总成绩。最后,使用HAVING子句筛选出总成绩高于85分的记录,并按照总成绩降序排序。
请注意,这个查询语句假设您的数据库中有一个名为score的表,并且该表包含S_no(学号)、C_no(课程编号)、daily(日常成绩)和final(期末成绩)等列。此外,根据您提供的数据,我们假设学生每门课程的结业成绩所占比例为70%的final和30%的daily。如果实际情况不同,请根据您的实际情况进行相应的调整。
php中文网 免责声明:以上内容除特别注明外均来源于网友提问,php中文网回答,权益归原著者所有;