大家好,我有一个问题就是吃了好几个小时。我要做的是计算表t2中有多少行具有相同的值,并且仅显示最大值而不是所有行。但我得到错误。我怎么能解决这个问题?我找不到具体的答案。
Msg 130,Level 15,State 1,Line 5 无法对包含聚合或子查询的表达式执行聚合函数。
SELECT t1.operatoriausPavadinimas,count(t2.operatoriausID) as ct
FROM Operatorius t1,Planas t2
WHERE t1.operatoriausID=t2.operatoriausID
Group by t1.operatoriausPavadinimas
Having COUNT(t2.operatoriausID)>=MAX(COUNT(t2.operatoriausID))
答案 0 :(得分:5)
这是正确的;嵌套聚合函数没有意义(尽管在窗口函数中嵌套聚合函数确实有意义)。一种简单的方法使用窗口函数,这些函数在大多数数据库中都可用:
SELECT op.*
FROM (SELECT o.operatoriausPavadinimas, count(p.operatoriausID) as ct,
RANK() OVER (ORDER BY count(p.operatoriausID) DESC) as seqnum
FROM Operatorius o JOIN
Planas p
ON o.operatoriausID = p.operatoriausID
GROUP BY o.operatoriausPavadinimas
) op
WHERE seqnum = 1;
注意:
t1
和t2
(或a
和b
)等随机名称。JOIN
语法。简单规则:从不在FROM
子句中使用逗号。编辑:
好的,在SQL Server中,最简单的是TOP WITH TIES
:
SELECT TOP (1) WITH TIES o.operatoriausPavadinimas, count(p.operatoriausID) as ct
FROM Operatorius o JOIN
Planas p
ON o.operatoriausID = p.operatoriausID
GROUP BY o.operatoriausPavadinimas
ORDER BY COUNT(p.operatoriausID) DESC