2010-11-28 9 views
1

RÉVISÉ: D'accord, grâce à tous vos commentaires, j'ai compris ce que je faisais mal (désolé les gars). J'attrape le coursID qui compte comme une section PAS un cours réel. Pour que je puisse saisir le nom du cours, je dois aller à la table des cours.Compte en nombre

J'ai maintenant le StudentID de l'inscription et le CourseNum du cours qui doivent être utilisés pour compter. Je vais essayer de travailler avec ce que vous avez fourni pour voir si je peux arriver aux résultats.

EDIT: Voici ma version SQL révisée. Cela me donne le total des cours pour chaque étudiant. Je reçois là:

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

code final au cas où ceux qui prennent soin:

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

Vous avez juste besoin d'ajouter une jointure interne à la table des cours et d'exécuter la clause having sur cette table. – IamIC

+0

Vous devez accepter une réponse si vous pensez avoir répondu à votre question. – Martin

+0

Et vous devriez utiliser le système de vote. – IamIC

Répondre

1

Pour obtenir le nombre total des étudiants sur 4+ cours, ceci est le SQL:

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

Il est beaucoup plus simple d'obtenir le compte de l'étudiant en utilisant une deuxième requête.

+0

Cela semble faire l'affaire. J'ai dû enlever l'AS T à la fin cependant. – OneSneakyMofo

+0

Grattez cela. J'ai enlevé le> = 4 remplacé par = 4 et il m'a donné 4. – OneSneakyMofo

+0

Glad cela a fonctionné. "AS T" est une chose SQL Server. – IamIC

3

Essayez ceci:

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

Me donne tous les 4s. – OneSneakyMofo

0
SELECT COUNT(*) FROM 
    (SELECT COUNT(*) FROM enrollment 
    GROUP BY studentid HAVING COUNT(*) = 4) 
+0

Me donne 3 qui est loin, lol – OneSneakyMofo

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

Jette moi une erreur: SQL n'est pas correctement terminé. – OneSneakyMofo

+0

Essayez-le maintenant. J'ai enlevé les sauts de ligne. J'ai juste essayé la question encore et cela a fonctionné bien pour moi. – bowsersenior

+0

ORA-00933: La commande SQL n'est pas correctement terminée – OneSneakyMofo

0

Je pensais que vous vouliez le nombre d'étudiants qui sont inscrits dans exactement quatre cours. Si vous voulez compter le nombre d'étudiants et le nombre de cours, faites ceci:

SELECT * FROM (SELECT COUNT(*) AS NumStudents FROM (SELECT DISTINCT studendid FROM enrollment)), (SELECT COUNT(*) AS NumCourses FROM (SELECT DISTINCT courseid FROM enrollment)) 
+0

Vous avez raison. J'ai besoin du nombre d'étudiants qui sont inscrits dans exactement quatre classes. – OneSneakyMofo

+0

Donc ma première solution et celle de sh_kamalh (qui est identique), devraient faire l'affaire. Si vous obtenez seulement 3 en conséquence mais attendez 190, il pourrait y avoir quelque chose de mal avec vos données. –

0
select count(*) 
    from (select student_id from enrollment group by student_id having count(*) = 4)

La requête interne vous donne les ID des étudiants qui se sont inscrits exactement 4 cours alors je les compte.

Questions connexes