您现在的位置是:亿华云 > 应用开发

Group By 有哪些注意事项?你知道吗?

亿华云2025-10-03 06:55:36【应用开发】6人已围观

简介注意:本文以下内容基于 MySQL 5.7 InnoDB 数据库引擎。1、group by 后面不能加 where在 MySQL 中,所有的 SQL 查询语法要遵循以下语法顺序:selectfromw

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

1、事项group by 后面不能加 where

在 MySQL 中,注意知道所有的事项 SQL 查询语法要遵循以下语法顺序:

selectfromwheregroup byhavingorder bylimit

以上语法顺序是不能前后互换的,否则报错。注意知道比如我们不能在 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 官方文档地址:

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html。

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 不能使用别名。

很赞哦!(1)