开发者社区> 问答> 正文

问下sql中order by 和group by问题?报错

一直有人说这个原则: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效果。问下问什么?

展开
收起
爱吃鱼的程序员 2020-06-08 14:32:17 735 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    这是低版本的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子句中。

     

    2020-06-08 14:32:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载