用SQL语句查询计算机科学系中选修课程门数大于刘德华同学(也是计算机科学系)所选课程门数的所有的学生姓名的选课门数及加权平均成绩,要求选课门数和加权平均成绩都按降序输出。【注:加权平均成绩等于所有课程的学分与成绩之和除以所有课程学分之和】
时间: 2023-06-06 08:06:15 浏览: 50
好的,这是一个计算机科学系的SQL语句问题,我可以回答。以下是SQL语句:
SELECT s.name, COUNT(sc.course_id) AS course_num, SUM(sc.credit*sc.grade)/SUM(sc.credit) AS weighted_avg_grade
FROM student s
JOIN sc ON s.id = sc.student_id
WHERE s.major = '计算机科学系'
GROUP BY s.name
HAVING COUNT(sc.course_id) > (SELECT COUNT(*) FROM sc WHERE student_id = (SELECT id FROM student WHERE name = '刘德华'))
ORDER BY course_num DESC, weighted_avg_grade DESC;
这个SQL语句会返回计算机科学系中选修课程门数大于刘德华同学所选课程门数的所有的学生姓名的选课门数及加权平均成绩,要求选课门数和加权平均成绩都按降序输出。
相关问题
使用sql语句查询计算机科学系中选修课程门数大于刘德华同学(也是计算机科学系)所选课程门数的所有的学生姓名的选课门数及加权平均成绩,要求选课门数和加权平均成绩都按降序输出。怎么写
以下是 SQL 语句的实现:
SELECT s.name, COUNT(sc.course_id) AS course_num, SUM(sc.score * c.credit) / SUM(c.credit) AS average
FROM student AS s
JOIN score AS sc ON s.id = sc.student_id
JOIN course AS c ON sc.course_id = c.id
WHERE s.department = '计算机科学系'
GROUP BY s.id
HAVING course_num > (
SELECT COUNT(sc2.course_id)
FROM student AS s2
JOIN score AS sc2 ON s2.id = sc2.student_id
WHERE s2.name = '刘德华'
)
ORDER BY course_num DESC, average DESC
注:该 SQL 语句假设各表结构如下:
student (id, name, department)
score (id, student_id, course_id, score)
course (id, name, credit)
SQL查询所选课程成绩都大于等于80分的学生所选的课程门数
可以使用如下的 SQL 查询语句来实现该功能:
```sql
SELECT s.student_id, COUNT(*) as selected_courses
FROM students s
INNER JOIN course_selection cs ON s.student_id = cs.student_id
INNER JOIN courses c ON cs.course_id = c.course_id
WHERE cs.score >= 80
GROUP BY s.student_id
```
该查询语句会将成绩大于等于80分的学生与他们所选的课程进行关联,然后通过 GROUP BY 子句按照学生ID进行分组统计每个学生所选的课程门数。最终结果是每个学生ID以及他所选的课程门数。