选择列表中的列 '***' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
2012-07-18 21:40
387 查看
今天用SQL Server尝试实现一个SQL语句的时候,报了如标题所示的错误,通过在百度里面搜索,并亲自动手实现,终于发现问题所在,现在把它记录下来。
语句如下:
select [OrderID],[ProductID], min(UnitPrice) as MinUnitPrice
into NewDetails FROM [Northwind].[dbo].[Order Details]
Group by [OrderID]
执行该语句之后,SQL Server报错如下:
“消息 8120,级别 16,状态 1,第 1 行
选择列表中的列 'Northwind.dbo.Order Details.ProductID' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。”
百度后在这篇日志里面找到了解决办法http://blog.sina.com.cn/s/blog_41399b8b01000997.html。
正确的语句应该是这样的:
select [OrderID],[ProductID], min(UnitPrice) as MinUnitPrice
into NewDetails FROM [Northwind].[dbo].[Order Details]
Group by [OrderID],[ProductID]
之所以应该这样写,是由Group By子句决定的。下面是从MSDN中找到的关于Group By的一些知识。
Group的作用:
指定由查询表达式(Select)返回的对象要分入的组。
[ GROUP BY aliasedExpression [ ,... n ] ]
参数:
aliasedExpression
要对其执行分组的任何有效查询表达式。expression可以是属性或者是引用 FROM 子句所返回的属性的非聚合表达式。 GROUP BY 子句中的每一个表达式的求值结果必须为可比较相等性的类型。这些类型通常为标量基元类型,如数字、字符串和日期。不可按集合分组。备注: 如果 SELECT 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每个组的汇总值。指定 GROUP BY 时,选择列表中任何非聚合表达式内的每个属性名都应包含在GROUP BY列表中,或者GROUP BY表达式必须与选择列表表达式完全匹配。
使用Group By子句的时候,一定要记住下面的一些规则:
(1)不能Group By非标量基元类型的列,如不能Group By text,image或bit类型的列;
(2)Select指定的每一列都应该出现在Group By子句中,除非对这一列使用了聚合函数;
(3)不能Group By在表中不存在的列;
(4)进行分组前可以使用Where子句消除不满足条件的行;
(5)使用Group By子句返回的组没有特定的顺序,可以使用Order By子句指定次序。
至于其它方面,可以参考上面链接的文章。
语句如下:
select [OrderID],[ProductID], min(UnitPrice) as MinUnitPrice
into NewDetails FROM [Northwind].[dbo].[Order Details]
Group by [OrderID]
执行该语句之后,SQL Server报错如下:
“消息 8120,级别 16,状态 1,第 1 行
选择列表中的列 'Northwind.dbo.Order Details.ProductID' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。”
百度后在这篇日志里面找到了解决办法http://blog.sina.com.cn/s/blog_41399b8b01000997.html。
正确的语句应该是这样的:
select [OrderID],[ProductID], min(UnitPrice) as MinUnitPrice
into NewDetails FROM [Northwind].[dbo].[Order Details]
Group by [OrderID],[ProductID]
之所以应该这样写,是由Group By子句决定的。下面是从MSDN中找到的关于Group By的一些知识。
Group的作用:
指定由查询表达式(Select)返回的对象要分入的组。
[ GROUP BY aliasedExpression [ ,... n ] ]
参数:
aliasedExpression
要对其执行分组的任何有效查询表达式。expression可以是属性或者是引用 FROM 子句所返回的属性的非聚合表达式。 GROUP BY 子句中的每一个表达式的求值结果必须为可比较相等性的类型。这些类型通常为标量基元类型,如数字、字符串和日期。不可按集合分组。备注: 如果 SELECT 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每个组的汇总值。指定 GROUP BY 时,选择列表中任何非聚合表达式内的每个属性名都应包含在GROUP BY列表中,或者GROUP BY表达式必须与选择列表表达式完全匹配。
使用Group By子句的时候,一定要记住下面的一些规则:
(1)不能Group By非标量基元类型的列,如不能Group By text,image或bit类型的列;
(2)Select指定的每一列都应该出现在Group By子句中,除非对这一列使用了聚合函数;
(3)不能Group By在表中不存在的列;
(4)进行分组前可以使用Where子句消除不满足条件的行;
(5)使用Group By子句返回的组没有特定的顺序,可以使用Order By子句指定次序。
至于其它方面,可以参考上面链接的文章。
相关文章推荐
- 选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- SQLgroupby报 错 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 数据库查询报错:选择列表中的列 '字段' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
- 选择列表中的列 '***' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- GROUP BY 子句中 选择列表中的列无效,因为该列没有包含在聚合函数或
- 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句
- 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句
- 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中
- 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句(
- ORDER BY 子句中的列 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 使用sql server时碰到的错误 关于对象.属性qingjia.id' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子...
- SQL统计数量,查询多列问题解决,(因为该列没有包含在聚合函数或 GROUP BY 子句中。)
- 42000[SQL Server]ORDER BY子句中的列无效,该列没有包含在聚合函数或GROUP BY 子句
- sql语句学习笔记(10)-group by(因为该列没有包含在聚合函数或 GROUP BY 子句中。聚合函数不能出现在where中)