在 SQL 中从 Count() 选择最大值时出错
Getting error while Selecting MAX value from Count() in SQL
我在 SQL 服务器中应用 MAX
和 COUNT
时遇到错误,即使我的代码是正确的。请在我出错的地方帮助我
显示Sales.Invoicestable
中打包物品数量最多的人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'”
错误:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near ')'
我建议为此使用 window 函数或 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;
我在 SQL 服务器中应用 MAX
和 COUNT
时遇到错误,即使我的代码是正确的。请在我出错的地方帮助我
显示Sales.Invoicestable
中打包物品数量最多的人idselect
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'”
错误:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near ')'
我建议为此使用 window 函数或 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;