0

我是 sql 查询的新手,所以不太了解

我有一个名为registration的表

该表具有以下结构

Student_ID int,
Course varchar(15),
Score int,
Semester varchar(15),
Discipline varchar(10),
Campus varchar(15),
Degree varchar(10),
Year int

它不包含任何主键它​​有来自同一所大学的 4 个不同校区的学生的数据,所以 student_id 是重复的

我需要在特定学期修读超过 5 门课程的学生总数

我希望我已经把问题说清楚了,如果有人可以的话,请帮忙。

4

3 回答 3

1

使用GROUP BYHAVING COUNT获取所有修过五门以上课程的学生:

SELECT student_id
FROM yourtable
WHERE Semester = ....
GROUP BY student_id
HAVING COUNT(DISTINCT Course) > 5

要获取学生人数,您可以计算查询返回的行数:

SELECT COUNT(*) AS total FROM
(
    SELECT student_id
    FROM yourtable
    WHERE Semester = ....
    GROUP BY student_id
    HAVING COUNT(DISTINCT Course) > 5
)
于 2012-12-25T22:35:43.570 回答
0

要获得注册超过 5 门课程的学生,请执行以下操作...

SELECT CAMPUS, STUDENT_ID
FROM REGISTRATION
WHERE SEMESTER = 'GIVEN SEMESTER'
GROUP BY CAMPUS, STUDENT_ID
HAVING COUNT(*) > 5;

要获得注册超过 5 门课程的学生人数,请执行以下操作...

SELECT COUNT(*)
FROM REGISTRATION
WHERE SEMESTER = 'GIVEN SEMESTER'
GROUP BY CAMPUS, STUDENT_ID
HAVING COUNT(*) > 5;

您需要按校园和学生 ID 分组,因为不同校园的学生 ID 重复。此外,如果我理解正确,主键应该是复合的(校园、学生 ID、学期、年份、课程)。

于 2012-12-25T23:30:47.113 回答
0
SELECT COUNT(DISTINCT(sub.Student_ID)) FROM
(
SELECT un.Student_ID, COUNT(*) FROM university un 
GROUP BY un.Student_ID, un.Semester
HAVING 
COUNT(un.Course)>5
) AS sub

我假设表名是大学

于 2012-12-25T23:37:03.023 回答