一直有人说这个原则:ORDER BY 子句中的列必须包含在聚合函数或 GROUP BY 子句中。
但是我今天执行了这个sql,
SELECT
a.act_code, a.create_time,
count(c.act_code) voteItemNum
FROM
vote_activity a left join vote_item c on c.act_code = a.act_code
WHERE
a.act_status = 1 and a.act_type = '1' group by a.act_code order by a.create_time
sql中a.create_time 不在聚合函数或者group by中,但是也没有报错,也达到sql效果。问下问什么?
这是低版本的mysql吗?sql92标注禁止这种查询,sql99允许这种查询,但是前提是group中的字段能唯一确定select中列出的其它字段。mysql5.7的时候,做了几次特别的调整,具体看官方文档照sql标注写就没问题版本在楼下。这么说不同版本,sql还有可能不通过?那服务器更换,迭代岂不是要出大问题
<imgheight="269"src="https://static.oschina.net/uploads/space/2017/0518/101111_glKK_3197054.png"width="696">
这是服务器中的版本
可以的.
groupby只是按某字段进行分组,如果没有orderby会自动按照查询到的结果进行自然排序,如果有了orderby则会按照orderby的字段进行排序.并不影响.
这是mysql搞的鬼,尽量不要写这种代码。你这个语句相当于groupby的三个字段分组,而你select列表中的create_time没有出现在group中,他的值是不可预料的,其他值应该是正常的一直有人说这个原则:ORDERBY子句中的列必须包含在聚合函数或GROUPBY子句中。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。