如何在NorthWind SQL Server上执行聚合?
我正在尝试汇总NorthWind表如何在NorthWind SQL Server上执行聚合?,sql,sql-server,aggregate,aggregate-functions,Sql,Sql Server,Aggregate,Aggregate Functions,我正在尝试汇总NorthWind表产品和类别,这样我就可以得到产品类别名称的列表,以及每个类别中的产品计数 迄今为止尝试的代码: SELECT Categories.CategoryName, Categories.CategoryID FROM Categories LEFT JOIN Products ON Products.CategoryID = Categories.CategoryID; 上面的代码显示了类别。但是,当我在类别ID上执行Group b
产品
和类别
,这样我就可以得到产品类别名称的列表,以及每个类别中的产品计数
迄今为止尝试的代码:
SELECT
Categories.CategoryName, Categories.CategoryID
FROM
Categories
LEFT JOIN
Products ON Products.CategoryID = Categories.CategoryID;
上面的代码显示了类别。但是,当我在类别ID上执行Group by时,会显示一个错误
列“Categories.CategoryName”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中
我不确定出了什么问题
注意:我是SQL Server新手添加GROUP BY后,除了GROUP BY子句中出现的表达式或任何其他集合上的聚合函数外,您不能再引用原始集合中的任何元素。 原因是,在GROUPBY之后,集合将由每个组的一行组成,并且保证相同的唯一值是GROUPBY表达式。对于所有其他列,必须保证单个值,唯一的方法是使用聚合函数——根据定义,它接受一组值并返回单个值。 这就是为什么如果按类别id分组,就不能引用类别名称。 因为我猜在您的例子中,它们在功能上是依赖的,所以您可以将两者都添加到GROUPBY子句中,或者将虚拟聚合添加到类别名称中
SELECT Categories.CategoryName, Categories.CategoryID, COUNT(*) AS CountProducts
FROM Categories
LEFT JOIN
Products
ON Products.CategoryID=Categories.CategoryID
GROUP BY Categories.CategoryName, Categories.CategoryID
OR
SELECT MAX(Categories.CategoryName) AS CategoryName, Categories.CategoryID, COUNT(*) AS CountProducts
FROM Categories
LEFT JOIN
Products
ON Products.CategoryID=Categories.CategoryID
GROUP BY Categories.CategoryID
分组依据的正确语法为:
SELECT c.CategoryName, c.CategoryID, COUNT(p.CategoryID)
FROM Categories c LEFT JOIN
Products p
ON p.CategoryID = c.CategoryID
GROUP BY c.CategoryName, c.CategoryID;
请注意,这引入了表别名,使查询更易于编写和读取
SELECT
中的所有未聚合列都位于groupby
提示:groupby
<代码>计数()
@GordonLinoff。。我尝试了GROUP BY(Categories.CategoryID).count(Categories.CategoryName),它抛出了一个错误,说“不能在int上调用方法”提示,请将计数移到Select子句@biggboss2019谢谢您解释聚合和GROUP BY!