为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name时显示错误

错误1055(42000):goods_id不在GROUP BY 中

而且我有个疑问,若这个代码执行成功,会有goods_name对应多个goods_id,这时为何会只显示一个goods_id?


正在回答

4 回答

如果你是想实现和老师相同的显示效果可以这样写

SELECT MIN(goods_id),goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name)>=2;

结果显示如下图

http://img1.sycdn.imooc.com//5710edff00018e2d18960302.jpg

不过根据老师的课程我觉得应该这样写

SELECT t1.goods_id,t1.goods_name  FROM tdb_goods AS t1 INNER JOIN (SELECT MIN(goods_id),goods_name  FROM tdb_goods GROUP BY goods_name HAVING count(goods_name)>=2) AS t2 ON t1.goods_name = t2.goods_name;

显示结果如下图

http://img1.sycdn.imooc.com//5710ef1b0001d9d718980438.jpg

0 回复 有任何疑惑可以回复我~
#1

克里斯缇娜

非常感谢!
2016-04-17 回复 有任何疑惑可以回复我~

我和你是相同情况,百度了一下发现是MySQL的问题。GROUP BY 后面要么是聚合函数,要么便要包含和SELECT后面相同的列名,然而因为MySQL本身的原因允许在GROUP BY中不必包含所有的非聚合字段,其实这是不严谨的,还是老老实实用聚合函数实现吧。

0 回复 有任何疑惑可以回复我~
#1

克里斯缇娜

请问该怎么改?
2016-04-15 回复 有任何疑惑可以回复我~
#2

TCircley 回复 克里斯缇娜

没看清楚还以为是楼主回复我了23333....我把代码贴下面了,直接回复好像贴不了图片。
2016-04-15 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//56d7da850001413b07900467.jpg我的语句就没错误啊,你确定错误语句是说“goods_id不在group by当中”?怎么读起来有点怪?

另外 为什么不对应多个goods_id,是因为你已近用GROUP BY goods_name 进行了分类 ,分类中没有重复的分类吧,所以自然没有重复对应的goods_id咯

0 回复 有任何疑惑可以回复我~

SELECT MIN(goods_id),goods_name FROM tdb_goods GROUP BY goods_name;这样就成功了,这是不是就是老师说的聚合函数的意思

但是还是不明白为什么老师的指令。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

为什么我SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name时显示错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信