哪个学院学生最多?
SELECT INSTITUTE
FROM STUDIES
HAVING COUNT(INSTITUTE) = (SELECT MAX(COUNT(INSTITUTE))
FROM STUDIES
GROUP BY INSTITUTE)
我犯了什么错误?这似乎很简单,但我不知道我错在哪里。
您不能嵌套聚合,如MAX(COUNT(...))
,这就是错误所说的。如果你只需要出现次数最多的机构,有一个更简单的方法:
(从错误措辞判断,它是Microsoft SQL Server,所以这就是我在这里使用的语法)
SELECT TOP 1 institute
FROM studies
GROUP BY institute
ORDER BY COUNT(*) DESC
您只需按出现次数排序并按该顺序选择最前面的1。这里有一个警告——如果多个研究所可以共享相同的计数,而你想要所有的计数呢?这就是HAVING
确实需要的地方,我们可以使用上述查询的一个变体来获得最大值:
SELECT institute
FROM studies
GROUP BY institute
HAVING COUNT(*) = (SELECT TOP 1 COUNT(*)
FROM studies
GROUP BY institute
ORDER BY COUNT(*) DESC)
dbfiddle演示。
我想你想要这个:
SELECT *
FROM (
SELECT *, COUNT(*) OVER (PARTITION BY INSTITUTE) AS I_Count
FROM studies
) X
ORDER BY X.I_Count DESC
如果你愿意,你可以使用limit或top 1来获取一行