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

GROUP BY 需要满足的条件

SELECT子句中的列名必须为分组列或列函数

列函数对于GROUP BY子句定义的每个组各返回一个结果


不是要满足这些要求吗,不然会报错,为什么视频里就没有报错,求解?

正在回答

2 回答

视频中出现的

分组列是:goods_name

列函数是:count()

“列函数对于GROUP BY子句定义的每个组各返回一个结果”

    ——视频中只定义了一个分组“goods_name”。

“SELECT子句中的列名必须为分组列或列函数”

    ——“SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name......”。

        我想条件中所述的列名应该是在"GROUP BY"后面的“goods_name”而并非"SELECT"后面的“goods_id,goods_name”,"SELECT"后面是要查找和显示的范围。

个人理解,希望能帮到楼主。

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

_Kamui_ 提问者

SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2 这个句子,用goods_name作为分组条件,那么每一个goods_name就会对应返回两个goods_id,这样每一条记录上的goods_id列和goods_name列的数据量就不匹配了,goods_id列要显示两个数据,而goods_name要显示一个数据。
2017-02-08 回复 有任何疑惑可以回复我~
#2

_Kamui_ 提问者

然后我实践发现,大多数数据库能够正确执行,自动取了goods_id列的第一个值展示,然而也有报错的情况,我以前就是一直认为会报错的,网上大多数的回答也是这个理论。 所以可能是数据库的版本问题,或者是某个配置设置可以将数据库的严格限制放宽这样?
2017-02-08 回复 有任何疑惑可以回复我~
#3

_Kamui_ 提问者

MySQL extends the use of GROUP BY to allow selecting fields that are not mentioned in the GROUP BY clause; MySQL对GROUP BY的使用进行了扩展,允许选择在GROUP BY子句中没有被提到的字段。 就这样理解吧,网上说的应该不是mysql
2017-02-08 回复 有任何疑惑可以回复我~
#4

_Kamui_ 提问者

聚聚
2017-02-08 回复 有任何疑惑可以回复我~
查看1条回复

存在版本group by 1055 错误的
select min(a.goods_id)goods_id,goods_name from tdb_goods a group by goods_name having count(goods_name)>1;

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

举报

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

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

进入课程

GROUP BY 需要满足的条件

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