2015-02-06 89 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