【问题标题】:SQL Having MAX(COUNT) errorSQL 出现 MAX(COUNT) 错误
【发布时间】:2015-12-16 17:54:14
【问题描述】:

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

【问题讨论】:

  • 标记您的 dbms,显示一些示例数据和预期结果

标签: sql sql-server


【解决方案1】:

这是正确的;嵌套聚合函数没有意义(尽管在窗口函数中嵌套聚合函数确实有意义)。一种简单的方法是使用大多数数据库中都可用的窗口函数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多