【问题标题】:Getting error while Selecting MAX value from Count() in SQL在 SQL 中从 Count() 中选择 MAX 值时出错
【发布时间】:2021-02-23 16:38:02
【问题描述】:

我在 SQL Server 中应用 MAXCOUNT 时遇到错误,即使我的代码是正确的。请帮助我哪里出错了

显示从 Sales.Invoices 表中打包最大数量项目的人的 ID

select 
    PackedByPersonID, count(PackedByPersonID) 
from 
    Sales.Invoices 
group by 
    PackedByPersonID 
having 
    count(PackedByPersonID) = (select max(max_count) 
                               from 
                                   (select PackedByPersonID, count(PackedByPersonID) max_count 
                                    from Sales.Invoices 
                                    group by PackedByPersonID))

在执行 SQL 时无法识别代码中的 max_count .. 因为它被红色下划线并显示“无效的列名 'max_count'”

错误:

消息 102,第 15 级,状态 1,第 8 行
')' 附近的语法不正确

【问题讨论】:

  • 您的代码不正确。如果它是正确的,你就不会收到错误。
  • 给你的表子查询一个别名
  • @GordonLinoff 好吧,要明确一点,语法错误绝对意味着代码不正确。其他错误可能不是当前代码不正确的故障。

标签: sql sql-server mssql-jdbc


【解决方案1】:

我建议为此使用窗口函数或TOP。但是您的语法错误是因为 FROM 子句中的所有子查询都需要 SQL Server 中的别名。所以:

select PackedByPersonID, count(PackedByPersonID)
from Sales.Invoices 
group by PackedByPersonID 
having count(PackedByPersonID) = (
           select MAX(max_count)
           from (select PackedByPersonID, count(PackedByPersonID) max_count
                 from Sales.Invoices 
                 group by PackedByPersonID
                ) i
------------------^ the table alias
          )

编写查询的更简单有效的方法是:

select top (1) with ties PackedByPersonID, count(*)
from Sales.Invoices 
group by PackedByPersonID 
order by count(*) desc;

【讨论】:

  • 不错,用肉眼很难找到。
猜你喜欢
  • 2021-09-11
  • 2014-05-22
  • 1970-01-01
  • 2016-09-27
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
相关资源
最近更新 更多