2012-03-24 51 views
0

我想从一个表中的每个部门结构如下选择具有最大招生类别:MySQL的计数的最大行数

课程:CID,部门,姓名

报名:CID,SID

这个想法是计算每个班级的所有入学人数,并找到每个部门的最大值。不幸的是,我遇到了最大数量组合的问题。

我的查询是要看起来像:

SELECT c.name, MAX(COUNT(*) FROM Enrollment E WHERE E.cid = C.cid) 
FROM Courses C 
GROUP BY C.dept 

但我无法弄清楚如何获得MAX-COUNT语法才能正常工作。我已经尝试了很多来自Google和StackOverflow的不同示例,并且它们都不适合我。 MySQL说这个语法是错误的。

+0

“课程”表在哪里? – Lion 2012-03-24 21:37:53

+0

对不起,我把这个查询写下了我的头顶。固定。 – 2012-03-24 22:16:09

回答

2

我就像这种问题的嵌套查询一样。首先选择每班分组的注册数。然后找到每个部门分组的最大入学人数:

SELECT MAX(cnt) cnt, dept FROM 
(
    SELECT COUNT(*) cnt, dept, C.cid 
    FROM Courses C 
     INNER JOIN Enrollment E on C.cid = E.cid 
    GROUP BY cid, dept 
) a 
GROUP BY dept 
+0

谢谢,我写的查询出了什么问题?这只是SQL和MySQL之间的区别吗? – 2012-03-24 22:40:05

+0

我认为查询有一些问题。例如:对于汇总语句,您选择的每个列必须是聚合函数或分组依据。所以“按名称选择名称,最大(某些)组”不起作用。 – McGarnagle 2012-03-25 02:22:08

0

没有电子商务的声明,所以你不能使用E.cid

所以,要么你做这个

SELECT c.name, COUNT(c.*) as count 
FROM Courses C 
GROUP BY C.dept 

或者,

SELECT c.name, MAX(SELECT COUNT(*) FROM Enrollment E WHERE E.cid = C.cid) 
FROM Courses C 
GROUP BY C.dept 
0
SELECT MAX(cnt) FROM (
    SELECT c.name, COUNT(E.*) AS cnt FROM Enrollment E 
    INNER JOIN Courses C ON E.cid = C.cid 
    GROUP BY C.dept 
) final