请考虑以下代码:
select vend_id, COUNT(vend_id) as num_prods
from Products
group by vend_id
当我删除最后一行时,出现以下错误:
列'Products.vend_id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
为什么会出现此错误?我犯的错误是什么(理解计数是如何工作的)?
答案 0 :(得分:2)
Count是一个聚合函数。
它返回查询定义的集合中的项目数。
如果查询中没有列,count将只计算查询返回的总行数。
如果将其他列添加到选择列表,则需要添加group by语句以赋予计数含义。 Group by告诉聚合函数对group by语句中的列具有相同值的所有行进行操作。
您在问题中提供的查询将返回唯一的vend_id值列表以及这些值在给定表中的存在次数。如果vend_id列是该表上的唯一键,那么您将获得vend_id的列表以及每行的1个。
有关COUNT功能的详细说明,请参阅此文档: http://msdn.microsoft.com/en-us/library/ms175997(v=sql.105).aspx
一般情况下,请参阅此文档以了解聚合函数的说明: http://msdn.microsoft.com/en-us/library/ms173454(v=sql.105).aspx
答案 1 :(得分:0)
在不使用分组依据的情况下编写查询的其他方式:
select vend_id, (select COUNT(*) from Products as products1 where products1.vend_id = Products.vend_id) as num_prods
from Products
答案 2 :(得分:0)
您收到错误是因为当您从查询中删除最后一行时,您在聚合函数count(vend_id)
和非聚合函数vend_id
中选择vend_id。您要求一个总计列(计数一)和一个详细一列(没有计数)。您需要告诉SQL Server如何处理任何非总计列。
select vend_id
from Products
select count(vend_id)
from Products
上述两个查询均有效。如果你想选择vend_id并按它计数,你必须按它分组。