SQL有MAX(COUNT)错误

Ben*_*spa 0 sql sql-server

大家好,我有一个问题就是吃了好几个小时.我要做的是计算表t2中有多少行具有相同的值,并且仅显示最大值而不是所有行.但我得到错误.我怎么能解决这个问题?我找不到具体的答案.

消息130,级别15,状态1,行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))
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 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;
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 作为缩写的表别名优于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
Run Code Online (Sandbox Code Playgroud)