当前位置:网站首页>mysql----group by、where以及聚合函数需要注意事项

mysql----group by、where以及聚合函数需要注意事项

2022-08-10 19:06:00 幼儿园里的山大王

一、group by产生的坑

一、假设有一张测试表test

 执行sql语句:select name from test group by name;通过分组过滤掉重复的name,

然后展先的字段也是name,这个没有问题的。

 

 二、注意坑

如果sql语句改为select * from test group by name;这个时候就有问题了。如果这个时候有一个中间表3,如下可以看到问题,也就是说,如果通过goup by进行分组过滤查询,查询字段又是全部,而分组字段却又只是一个,那么有重复数据的其他字段就会出现问题,由于mysql单元格里只能有一个数据,这个时候就会报错。

 三、解决方法

对于group by 进行去重,select后面跟着的查询字段,要么就是group by里的字段(select name from test group by name ),要么就是使用聚合函数(select name sum(number) from test group by name),(select name,sum(id) from test group by name,number,此结果如下图)

 二、where 注意事项

一、where 后面不能跟聚合函数

如果where后面跟了聚合函数,会出现Invalid use of group function的错误。如果想使用聚合函数进行过滤或统计之类的操作,要么是在select 后面进行,要么就在having后面进行。

二、where和having之间的区别

1、where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”,因为where的执行顺序在聚合函数之前。

2、having是一个过滤声明,过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,且having后面可以使用“聚合函数”。注意:having是对查出来的结果进行过滤,那么对没有查出来的值就不能使用having。另外。having不是必须和group by一起使用的,两者没有捆绑关系

原网站

版权声明
本文为[幼儿园里的山大王]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_42972832/article/details/126154382