簡體   English   中英

在SQL查詢中使用Count和Max

[英]Using Count and Max in SQL Query

我有兩個表格要查詢,分別是“注冊”和“課程”。 在“課程表”中,每個課程只有一個條目,但是在“注冊”表中,每個課程的每個學生都有一個條目,因此一個課程可能有30個條目。 我的任務是找到注冊人數最多的課程,並打印出該課程的名稱以及該課程的注冊人數。 到目前為止,這是我的查詢

select c.CourseCode ,(SELECT count( * ) FROM Enrollment WHERE CourseCode = c.CourseCode) as test from Course c ;

這給了我結果:

CS227-29

CS228-34

第309章-31

CS311-25等,這很好,但是現在,我如何只打印出注冊人數最多的班級(在本例中為CS228)。 我已經嘗試過使用max(),但是我什么都無法工作。

這是表結構

創建表Course(CourseCode char(50),CourseName char(50),PreReq char(6));

創建表注冊(CourseCode char(6)NOT NULL,SectionNo int NOT NULL,StudentID char(9)NOT NULL引用Student,Grade char(4)NOT NULL,主鍵(CourseCode,StudentID),外鍵(CourseCode,SectionNo)參考產品);

只需按計數排序即可獲得前1名。

那是:

Select Top 1 A.CourseCode, Count(*) From Course A inner join Enrollment B on (A.CourseCode=B.CourseCode) 
Group By A.CourseCode
Order By Count(*) DESC

另外-使用這里顯示的內部聯接而不是子查詢。 我確實喜歡SubQueries,並且這個查詢可以工作,但是在這種查詢中不合適!

根據您的評論,我認為打擊查詢是您想要的,盡管未經測試,並且我不確定HAVING子句是否有效。 從MySQL頁面上的文檔看來,它應該可以工作。

SELECT A.CourseCode, COUNT(*) AS count FROM Course A
JOIN Enrollment B ON A.CourseCode = B.CourseCode
GROUP BY A.CourseCode
HAVING count = MAX(count)

至於性能,我無法判斷在聚合函數上運行MAX是否是一個好主意(可能不是)。

否則,只需使用其他查詢返回前X個,然后簡單地與前一個數字進行比較即可。

SELECT 
      c.CourseCode, 
      c.CourseName,
      COUNT(*) AS cnt 
FROM
      Course AS c
  INNER JOIN
      Enrollment AS e
          ON c.CourseCode = e.CourseCode 
GROUP BY
      c.CourseCode
HAVING 
      COUNT(*) = 
         ( SELECT  
                 COUNT(*) AS cnt 
           FROM
                 Enrollment AS e
           GROUP BY
                 e.CourseCode
           ORDER BY
                 cnt DESC
           LIMIT 1
         )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM