0

更新 我有这样的查询

select sl.College_ID,sl.Department_ID,COUNT(sl.RegisterNumber)  from StudentList sl
group by  sl.College_ID,sl.Department_ID
order by sl.College_ID,sl.Department_ID asc

以上查询给出了以下结果,我有 200 - 大学 id,每所大学有 6 个部门 ID,我可以得到每个部门的计数 [学生人数]

College_Id  Dept_Id  count 
1           1           100
1           2           210
2           3           120
2           6           80
3           1           340

但我的问题是我需要显示每个部门的最大人数[学生]

像这样的东西

college_ID  Dept_Id  count 
3               1       340
26              2       250

我试过了,但出错了

select sl.College_ID,sl.Department_ID,COUNT(sl.RegisterNumber)  from StudentList sl
group by  sl.College_ID,sl.Department_ID
having  COUNT(sl.RegisterNumber)=max(COUNT(sl.RegisterNumber))
order by sl.College_ID,sl.Department_ID asc

出了什么问题有人可以帮助我吗

4

2 回答 2

2

也许是这样的?

SELECT sl.College_ID, sl.Department_ID, COUNT(sl.RegisterNumber) As StudentCount, s2.MaxCount
    FROM StudentList sl
    INNER JOIN (
        SELECT Department_ID, MAX(StudentCount) AS MaxCount
            FROM (
                SELECT College_ID, Department_ID, COUNT(*) As StudentCount
                    FROM StudentList
                    GROUP BY College_ID, Department_ID
                ) s1
            GROUP BY Department_ID
        ) s2 ON sl.Department_ID = s2.Department_ID
    GROUP BY sl.College_ID, sl.Department_ID, s2.MaxCount
    HAVING COUNT(sl.RegisterNumber) = s2.MaxCount
    ORDER BY sl.College_ID, sl.Department_ID ASC

编辑:我已经更新了查询以更准确地回答您的问题,我错过了您想要College_ID最大计数的部分。

编辑 2:好的,现在应该可以了,我需要第二个嵌套子查询来聚合聚合。我不知道比较不同组的聚合的更好方法。

于 2013-10-07T12:50:25.380 回答
0

您想要的结果是college_ID上的组,而您并不真正关心college_ID,因为从您的示例中, Dept_Id=1 将无法确定哪个college_ID 是。

在这种情况下,您可以从 select 语句中删除college_ID并执行SUM GROUP BY

根据您的查询,例如:

SELECT t.Department_ID, SUM(t.c)
FROM (
select sl.College_ID,sl.Department_ID,COUNT(sl.RegisterNumber) c from StudentList sl
group by  sl.College_ID,sl.Department_ID
) t
GROUP BY t.Department_ID
ORDER BY SUM(t.c)

注意:如果你真的想要你的结果中的大学 ID,你可以做 aJOIN来获取你的大学 ID

于 2013-10-07T15:22:42.403 回答