
having用于group by分组统计时统计函数的结果筛选。例如:
select count() , bookname from books group by bookname having count()>10
这里不能使用where count()>10
having avg(score) >= 60 很明显啊,只选择平均成绩大于等于60的记录
having 和where 都是用来筛选用的,having 是筛选组 而where是筛选记录。 扩展资料
1类型:
“Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”;
“Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。
2使用的角度:
where后面之所以不能使用聚合函数是因为where的执行顺序在聚合函数之前,
如下面这个sql语句:select sum(score) from student group by studentsex where sum(studentage)>100;
having既然是对查出来的结果进行过滤,那么就不能对没有查出来的值使用having,
如下面这个sql语句: select studentid,studentname from student having studentscore >90;
区别:
1having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤 *** 作。
2group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。 在说group by的时候,我们还需要了解聚合函数,聚合函数是SQL语言中一种特殊的函数。
扩展资料:group by,where,having 是数据库查询中最常用的几个关键字。在工作中,时常用到,当一个语句中同时含有where、group by 、having及聚集函数时,执行顺序如下:
执行where子句查找符合条件的数据;使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。需要注意的是,having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle。
参考资料:
having后面可以不跟聚合函数, 但他只能根据group by后面字段进行再次筛选, 比如: group by A having A = xxx ,或者 group by A having max(A) = xxx。 如果用group by A,这个时候如果使用having B= xxx 的时候 , 可以想象一下按照咱们正常的逻辑 , 它就不知道该用A组里面哪一个B字段了。所以大部分情况having后面都是聚合函数(这也是having存在的意义,它本身就是用来基于某一个组上的数据来 *** 作或者筛选的)。
以上就是关于数据库中的数据选择排序,为什么要用having进行选择全部的内容,包括:数据库中的数据选择排序,为什么要用having进行选择、having和where的区别、having和group by的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)