关于因为该列没有包含在聚合函数或 GROUP BY 子句中

参考:http://blog.csdn.net/wlf535944903/article/details/5576287

在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句突然看到这个问题,脑袋一蒙,不知道啥意思,后来想想,试图把select里的选项放到后面,问题自然解决!下面这个就是报“在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句”问题语句
select shipcountry,sum(shipvia) as totalvia,OrderDate as thefirsttime from orders group by shipcountry下面是通过的,请注意orderdateselect shipcountry,sum(shipvia) as totalvia,OrderDate as thefirsttime from orders group by shipcountry,orderdate相应的从网上看到其他的朋友也有这样的问题比如要显示authors表中的au_fname,au_lname,zip, city,state信息,并且按city分组(相同city的排列在一起)

错误的表达:
select au_fname,au_lname,zip, city,state
from authors
group by city

就会出现:服务器: 消息 8120,级别 16,状态 1,行 1
列 'authors.au_fname' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
服务器: 消息 8120,级别 16,状态 1,行 1
列 'authors.au_lname' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
...... 的错误提示。

正确的表达:
select au_fname,au_lname,zip, city,state
from authors
group by city,au_lname,au_fname,zip,state

即指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。

其实还有更好的办法:
select au_fname,au_lname,zip, city,state
from authors
order by city
即使用order by 子句

还是authors表,要求在每个城市取一个作者,显示该作者的左右信息:
可以用如下表达:
select * from authors
where au_id in
(select min(au_id)
from authors
group by city)
其实是分组后取最小ID的

比如要显示authors表中的au_fname,au_lname,zip, city,state信息,并且按city分组(相同city的排列在一起)

错误的表达:
select au_fname,au_lname,zip, city,state
from authors
group by city

就会出现:服务器: 消息 8120,级别 16,状态 1,行 1
列 'authors.au_fname' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
服务器: 消息 8120,级别 16,状态 1,行 1
列 'authors.au_lname' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
...... 的错误提示。

正确的表达:
select au_fname,au_lname,zip, city,state
from authors
group by city,au_lname,au_fname,zip,state

即指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。

其实还有更好的办法:
select au_fname,au_lname,zip, city,state
from authors
order by city
即使用o


  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误是因为在 SQL 查询语句,某一列没有包含聚合函数group by 子句。这意味着该列的值不能被正确地聚合或分组,因此会导致错误的结果。要解决这个问题,需要将该列包含聚合函数group by 子句。 ### 回答2: 在SQL,如果在SELECT语句使用了没有包含聚合函数GROUP BY子句的列,就会出现错误提示“该列没有包含聚合函数GROUP BY子句”。这个错误意味着SQL无法确定要针对每个不同的分组执行哪些操作。 为了更好地理解这个错误提示,有必要了解一下聚合函数GROUP BY子句的作用。聚合函数是用于计算数据集合计值的函数,例如SUM,AVG,COUNT等等。GROUP BY子句则是用于将行分组,以便在每个组使用聚合函数计算结果。在使用GROUP BY子句时,SELECT语句只能包含聚合函数GROUP BY子句的列及其他可以唯一确定每个组的列。如果SELECT语句包含了其他的列,就会出现上述的错误提示。 举个例子来说,假设我们有一张存储销售数据的表格,其包括销售日期、销售金额、销售人员和销售地点等信息。如果我们想要统计每位销售人员的销售总额,并按照销售地点分组,可以用如下的SQL语句: SELECT 销售人员, 销售地点, SUM(销售金额) as 销售总额 FROM 销售表 GROUP BY 销售人员, 销售地点; 这个语句,我们使用了SUM函数对销售金额进行了求和操作,并在GROUP BY子句对销售人员和销售地点进行了分组。在SELECT语句,我们只包括了聚合函数GROUP BY子句的列,而没有包括其他的列,因此不会出现之前提到的错误提示。 总之,如果SELECT语句包含没有包含聚合函数GROUP BY子句的列,就会提示“该列没有包含聚合函数GROUP BY子句”的错误,这时需要修改SELECT语句,去掉这些列或者将它们加入到聚合函数GROUP BY子句。 ### 回答3: 在使用 SQL 查询语句时,当出现“无法将列 'xxxx' 单独列出,因为该列没有包含聚合函数group by 子句”这类提示时,这是因为该列没有包含聚合函数group by 子句所致。 SQL 语言聚合函数包括 count、sum、avg、min、max 等,它们能够将多个行数据聚合成一个结果。而 group by 子句用于对查询结果进行分组,将相同的数据分在同一组。 在进行 SQL 查询时,如果想查找某一列的数据,而该列包含聚合函数group by 子句,就会出现上述错误提示。这是由于查询语句存在聚合函数,但是查询数据使用了未聚合的列,导致了数据无法正确地聚合和统计。 解决此问题的方法是将该列添加到 group by 子句,或者使用聚合函数该列进行统计。例如,如果查询语句需要显示某个商品的总销售量和平均售价,可以将该列添加到 group by 子句,或使用 sum 和 avg 两个聚合函数实现。 总之,遇到“无法将列 'xxxx' 单独列出,因为该列没有包含聚合函数group by 子句”这类错误提示时,需要注意查询语句是否存在聚合函数group by 子句,以及是否正确地引用了数据表的列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值