group by问题

在使用group by进行查询结果分组的时候,报错:

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'goodsinfo.item.amount' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

报错原因以及解决方法:

这里的mysql的sql模式采用了全模式匹配,也就是sql_mode=only_full_group_by,出现了依赖冲突。也就是说select后面的字段,除了聚合函数,都必须出现在group by 的后面。因为你是要利用某个字段进行分组,那么该字段就存在于select 后面。除了聚合函数select 后面的字段都应该要出现在group by 后面。

#执行以下sql语句以上错误
SELECT item.amount "订单数量",MONTH(d.order_date) orderDate FROM `order` d INNER JOIN orderitem item ON d.order_id=item.order_id GROUP BY d.order_date; 
#如果要实现按照月分组,统计每个月的订单数量,应该使用这个sql语句
SELECT MONTH(d.order_date) "月份",COUNT(item.amount) "订单数量" FROM `order` d INNER JOIN orderitem item ON d.order_id=item.order_id GROUP BY MONTH(d.order_date) ORDER BY MONTH(d.order_date); 

where,group by后面关于是否能够接聚合函数的问题

  • where 子句后面是不能够接聚合函数的。聚合函数有sum(),count(),avg(),max(),min(),等等其他函数。
  • group by 子句后面接的是要分组的列,having 设置分组条件,这个having子句后面是可以接聚合函数的。

转载于:https://www.cnblogs.com/jasonboren/p/11362271.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值