MYSQL  group by 有哪些注意事项

 更新时间:2022年07月05日 10:37:17   作者:​ Java中文社群 ​  
这篇文章主要介绍了MYSQL  group by 有哪些注意事项,比如我们不能在 group by 之后添加 where 查询语句,更多相关分享,需要的朋友可以参考下面文章内容

前言:

注意:本文以下内容基于 MySQL 5.7 InnoDB 数据库引擎。

1.group by 后面不能加 where

在 MySQL 中,所有的 SQL 查询语法要遵循以下语法顺序:

  • select
  • from
  • where
  • group by
  • having
  • order by
  • limit

以上语法顺序是不能前后互换的,否则报错。比如我们不能在 group by 之后添加 where 查询语句,否则会出现如下错误: 

 语法顺序的执行是和 MySQL 的 select 语句执行顺序相关的,select 执行先后顺序如下:

  • from 阶段
  • where 阶段
  • group 阶段
  • having 阶段
  • select 阶段
  • order by 阶段
  • limit 阶段

注意:其中 select 比较特殊,在进行查询语句编写时,要写在最前面,其余语法顺序要和执行先后顺序保持一致。

2.having 或 group by 可单独使用

having 和 group by 可以单独使用,如下查询所示: 

3.having 和 group by 可使用别名

**当 having 单独使用时,它的作用和 where 类似,但又有细微的不同。**比如在 where 中不能使用别名,但 having 和 group by 却可以别名。咱们创建一个测试表来演示一下,建表 SQL 如下:

drop table if exists student_score;
create table student_score(
    id int primary key auto_increment comment '主键',
    name varchar(250) comment '姓名',
    math decimal(4,1) comment '数学成绩',
    chinese decimal(4,1) comment '语文成绩'
);
insert into student_score(name,math,chinese) values('张三',50,50),('李四',80,80),('王五',90,90);

表中的数据如下图所示: 

 当我们使用总成绩别名 total 分别在 where 和 having 中使用时,查询结果如下: 

 从上述结果可以看出,having 查询可以使用 select 中的别名,而 where 不能使用别名。 除了 having 可以使用别名之外,group by 也可以使用别名,

如下图所示: 

为什么where不能用别名?为having却可以?

where 中不能使用别名,这和 MySQL 语句执行顺序有关,MySQL 语句执行顺序如下:

  • from 阶段
  • where 阶段
  • group 阶段
  • having 阶段
  • select 阶段
  • order by 阶段
  • limit 阶段

也就是说,**在执行 where 查询时,select 还没执行,因此在 where 中想要使用还未执行的 select 中的别名是不行的。**那从上面的执行顺序可以看到,having 执行也在 select 之前,为什么它就可以使用 select 中的别名呢?

这是因为 MySQL 在 5.7.5 之后做了扩展,允许在 having 中使用别名,官方文档中有相应的说明,

如下图所示: 

 MySQL 官方文档地址:

PS:group by 能使用别名的原理和 having 类似。

总结

SQL 语句编写一定要遵循此先后顺序:select、from、where、group by、having、order by、limit。其中 having 或 group by 都可单独使用,并且在 MySQL 5.7.5 之后,group by 和 having 可以使用别名查询,但 where 不能使用别名。

到此这篇关于MYSQL group by 有哪些注意事项?的文章就介绍到这了,更多相关MYSQL group by内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL与Oracle的语法区别详细对比

    MySQL与Oracle的语法区别详细对比

    Oracle和mysql的一些简单命令对比在本文中将会涉及到很多的实例,感兴趣的你不妨学习一下,就当巩固自己的知识了
    2013-03-03
  • mysql单字段多值分割和合并的处理方法

    mysql单字段多值分割和合并的处理方法

    这篇文章主要给大家介绍了关于mysql单字段多值分割和合并的处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • MySQL数据库常用操作和技巧(DBA必备知识)

    MySQL数据库常用操作和技巧(DBA必备知识)

    MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老MySQL DBA总结了MySQL数据库最常见和最常使用的一些经验和技巧,与分享大家!
    2011-03-03
  • Mysql 5.7.18 利用MySQL proxies_priv实现类似用户组管理

    Mysql 5.7.18 利用MySQL proxies_priv实现类似用户组管理

    这篇文章主要为大家详细介绍了Mysql 5.7.18利用MySQL proxies_priv实现类似用户组管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 探究MySQL中varchar的定义长度

    探究MySQL中varchar的定义长度

    这篇文章主要介绍了探究MySQL中varchar的定义长度,文中主要对其长度究竟是字节还是字符做出了相关实验,需要的朋友可以参考下
    2015-05-05
  • MySQL CHAR和VARCHAR该如何选择

    MySQL CHAR和VARCHAR该如何选择

    MySQL 支持字符串的数据类型并不多,但是却有多种变化形式。MySQL 5.0以后更是支持每一列字符串可以有自己的字符集以及排序规则,这使得数据表设计更为复杂。本篇介绍字符类型的数据表字段 CHAR 和 VARCHAR 该如何选择。
    2021-05-05
  • 免安转MySQL服务的启动与停止方法

    免安转MySQL服务的启动与停止方法

    免安转MySQL服务的启动与停止方法,可以不用安装解压以后即可执行,对于老手推荐,新手建议用安装版本。
    2011-03-03
  • mysql一对多关联查询分页错误问题的解决方法

    mysql一对多关联查询分页错误问题的解决方法

    这篇文章主要介绍了mysql一对多关联查询分页错误问题的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • mysql索引(覆盖索引,联合索引,索引下推)

    mysql索引(覆盖索引,联合索引,索引下推)

    这篇文章主要介绍了mysql索引(覆盖索引,联合索引,索引下推),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • SQL中from_unixtime函数的使用方法实例

    SQL中from_unixtime函数的使用方法实例

    在MySQL数据表设计中,时间字段一般都设计为时间戳格式的,开发人员去查看的时候就显得有点不方便,可以使用FROM_UNIXTIME转换成日期格式进行查看,下面这篇文章主要给大家介绍了关于SQL中from_unixtime函数的使用方法的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论