2015-02-06 94 views
-5

我对如何执行以下sql命令有疑问:Sql count和min

报告具有最低注册人数的课程。您应该输出课程代码和注册数量。

有问题的表: - 与CourseCode,SectionNo,StudentID和

的表格报名,我不知道从哪里开始使用此所以任何帮助将非常感激。

我想这完全不工作的情况如下:

select p.CourseCode, count(p.StudentID) AS Num_Students 
from Enrollment p 
where count(p.StudentID) = (select min(select count(e1.StudentID)) from Enrollment e1 where e1.CourseCode = p.CourseCode) 
group by p.CourseCode; 

我想的结果是有CourseCode和学生只能与StudentIDS的分额的课程数目。我认为我的逻辑很好,但我不太了解sql语法以获得我想要的。

+3

如果你想本网站上的帮助,请告诉我们先从:那你试试? – 2015-02-06 02:02:03

回答

0

获取与studentid的最小非零计数过程中(最低数招生):

SELECT COUNT(e.studentid) AS lowest_nonzero_count 
    FROM Enrollment e 
GROUP BY e.coursecode 
ORDER BY 1 
LIMIT 1 

但是,如果我们要考虑的是没有任何的入学课程(即,如果我们考虑到零是最低的数字入学的有效值)

SELECT COUNT(e.studentid) AS lowest_count 
    FROM course c 
    LEFT 
    JOIN enrollment e 
    ON e.coursecode = c.coursecode 
GROUP BY c.coursecode 
ORDER BY 1 
LIMIT 1 

哪些课程有一个最低(非零)studentid的计数?如果我们知道具体的值,我们可以做到这一点(代表有一个占位符:lowest_nonzero_count这个值:

SELECT d.coursecode 
    , COUNT(d.studentid) 
    FROM enrollment d 
GROUP BY d.coursecode 
HAVING COUNT(d.studentid) = :lowest_nonzero_count 

这是我们能够与返回值的子查询替换:lowest_nonzero_count占位符:

SELECT d.coursecode 
    , COUNT(d.studentid) 
    FROM enrollment d 
GROUP BY d.coursecode 
HAVING COUNT(d.studentid) = 
     (SELECT COUNT(e.studentid) 
      FROM Enrollment e 
      GROUP BY e.coursecode 
      ORDER BY 1 
      LIMIT 1 
     ) 
ORDER BY d.coursecode  

如果我们要考虑一个“零”值作为入学率的有效号码:

SELECT b.coursecode 
    , COUNT(d.studentid) 
    FROM course b 
    LEFT 
    JOIN enrollment d 
    ON d.coursecode = b.coursecode 
GROUP BY b.coursecode 
HAVING COUNT(d.studentid) = 
     (SELECT COUNT(e.studentid) 
      FROM course c 
      LEFT 
      JOIN enrollment e 
      ON e.coursecode = c.coursecode 
      GROUP BY c.coursecode 
      ORDER BY 1 
      LIMIT 1 
     ) 
ORDER BY b.coursecode