[英]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.