SQL有MAX(COUNT)错误

时间:2015-12-16 17:54:15

标签: sql sql-server

大家好,我有一个问题就是吃了好几个小时。我要做的是计算表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))

1 个答案:

答案 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;

注意:

  • 缩写的表别名优于t1t2(或ab)等随机名称。
  • 学习使用显式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