2010-11-28 2 views
1

ПЕРЕСМОТРЕННОЕ: Хорошо, благодаря всем вашим входам, я понял, что я делаю неправильно (извините, ребята). Я хватаю идентификатор курса, который считается секцией, не являющейся фактическим курсом. Для меня, чтобы захватить фактическое имя курса, я должен перейти к Таблице курсов.Количество в подсчете

Итак, теперь у меня есть StudentID от регистрации и курса курса, которые необходимо использовать для подсчета. Я попытаюсь работать с тем, что вы, ребята, предоставили, чтобы посмотреть, смогу ли я придумать результаты.

EDIT: Вот мой пересмотренный SQL. Это дает мне общее количество курсов для каждого студента. Я получаю там:

SELECT  Count(DISTINCT Course.courseNum), Grades.studentID 
FROM   Grades INNER JOIN 
      Course ON Grades.courseID = Course.courseID 
      GROUP BY Grades.studentID; 

Финальный код только в случае, если те, кто заботится:

SELECT COUNT(NumCourses) FROM 
(SELECT  Count(DISTINCT Course.courseNum)AS NumCourses 
FROM   Grades INNER JOIN 
         Course ON Grades.courseID = Course.courseID 
        GROUP BY Grades.studentID 
      HAVING Count(DISTINCT Course.courseNum) = 1) a; 
+0

Вам просто нужно добавить внутреннее соединение в таблицу курсов и выполнить предложение having на этой таблице. – IamIC 2010-11-28 09:05:02

+0

Вы должны принять ответ, если почувствуете, что на ваш вопрос был дан ответ. – Martin 2010-11-28 20:39:35

+0

И вы должны использовать систему голосования. – IamIC 2010-11-29 06:14:12

ответ

1

Чтобы получить общее количество студентов на курсах 4+, это SQL:

SELECT COUNT(CourseCount) AS CourseCount 
FROM (
    SELECT StudentID, COUNT(CourseID) AS CourseCount 
      FROM enrollment 
      GROUP BY StudentID 
      HAVING (COUNT(CourseID) >= 4)) AS T 

Гораздо проще получить счетчик учащихся, используя второй запрос.

3

Попробуйте это:

select count(studentId), count(courseId) from enrolment group by courseId having (count(courseId) = 2); 
+0

Дает мне все 4s. – OneSneakyMofo 2010-11-28 08:20:51

0
SELECT COUNT(*) FROM 
    (SELECT COUNT(*) FROM enrollment 
    GROUP BY studentid HAVING COUNT(*) = 4) 
0
SELECT COUNT(NumCourses) AS NumStudents, NumCourses FROM (SELECT COUNT(courseID) AS NumCourses FROM enrollment GROUP BY courseID HAVING COUNT(courseID) = 4) As SomeTableAlias 
0

Я думал, что вы хотели, чтобы число студентов было записано ровно в четыре курса. Если вы хотите, чтобы подсчитать количество студентов и количество курсов, сделать это:

SELECT * FROM (SELECT COUNT(*) AS NumStudents FROM (SELECT DISTINCT studendid FROM enrollment)), (SELECT COUNT(*) AS NumCourses FROM (SELECT DISTINCT courseid FROM enrollment)) 
0
select count(*) 
    from (select student_id from enrollment group by student_id having count(*) = 4)

Внутренний запрос дает идентификаторы студентов, обучающихся ровно 4 курсов, то я их сосчитать.

Смежные вопросы