解决方法:"Cannot perform an aggregate function on an expression containing an aggregate or a subquery."



哪个学院学生最多?

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来获取一行

相关内容

  • 没有找到相关文章

最新更新