Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在NorthWind SQL Server上执行聚合?_Sql_Sql Server_Aggregate_Aggregate Functions - Fatal编程技术网

如何在NorthWind SQL Server上执行聚合?

如何在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

我正在尝试汇总NorthWind表
产品
类别
,这样我就可以得到产品类别名称的列表,以及每个类别中的产品计数

迄今为止尝试的代码:

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!