文档章节

为什么聚集函数不能出现在where子句中

猪刚烈
 猪刚烈
发布于 2014/10/12 11:47
字数 442
阅读 72
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

      这是一个很有意思的问题,仔细地想一下其实很有道理。我们知道,聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对数据行进行过滤的,在筛选过程中依赖“基于已经筛选完毕的数据得出的计算结果”是一种悖论,这是行不通的。更简单地说,因为聚集函数要对全列数据时行计算,因而使用它的前提是:结果集已经确定!而where子句还处于“确定”结果集的过程中,因而不能使用聚集函数。与where子句不能出现聚集函数正相反的是,我们几乎看不到不使用聚集函数的having子句。为什么?因为在水平方向上根据外部指定条件的筛选(也就是对行的筛选),where子句可以独立完成,剩下的往往都是需要根据结果集自身的统计数据进一步筛选了,这时,几乎都需要通过having子句配合聚集函数来完成。

      另外,对于having子句再多说一点:没有使用group by而直接使用having子句的例子是不太多见,因为如果没有group by,那么整个结果集就是一个分组,但是这种例子也不是没有,比如当我们需要对“现有的”整个结果集进行“二次筛选”时,就会直接使用having子句了。例如:

查询一个Forum最新的Post的SQL为:

select p.* from Forum f left join Thread t on f.id = t.forumId left join Post p on t.id = p.threadId where f.id = 2 having max(p.creationTime); 

本文转载自:http://blog.csdn.net/bluishglc/article/details/6011269

猪刚烈

猪刚烈

粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
加载中

评论(0)

sql中的group by 和 having 用法解析

group by 的执行的过程,先执行select 的操作返回一个程序集,然后去执行分组的操作,这时候他将根据group by 后面的字段进行分组,并且将相同的字段并称一列数据,如果group by 后面没有这个...

岛主
2015/09/29
757
0
快速回顾MySQL:汇总和分组

10.3 汇总数据 我们经常需要汇总数据而不用把它们实际检索处出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表的生成。这种类型的检索例子有以下几种...

osc_i05nmotv
01/16
4
0
SQL分组查询及聚集函数的使用

今天要做一个查询统计功能,一开始有点犯难,上午尝试大半天才写出统计sql语句,才发现自己sql分组查询及聚集函数没学好;其实就是group by子句和几个聚集函数,熟练使用统计功能很简单。在此...

osc_xp2ngacj
2018/05/24
2
0
mysql中having的用法(及和where的区别)

来源:https://blog.csdn.net/qq_28863045/article/details/80372353 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和havin...

osc_vylqfbau
2019/04/18
1
0
group by,having,where

--举例子说明:查询table表查询每一个班级中年龄大于20,性别为男的人数 select COUNT(*)as '>20岁人数',classid from Table1 where sex='男' group by classid,age having age>20 --需要注意......

偶尔诗文
2015/09/25
67
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么中国开发不出流行的操作系统和编程语言

为什么中国开发不出流行的操作系统和编程语言 Stitch/2020-2-21 引子 知乎有两个帖子很有意思, 中国能不能写出操作系统? 中国为什么没有自己的编程语言 看了很多回到,有的答案写的很认真,...

osc_oq0m8kxk
13分钟前
15
0
干货,比较全面的c#.net公共帮助类(Common.Utility)

Common.Utility 初衷 网上有各式各样的帮助类,公共类,但是比较零碎,经常有人再群里或者各种社交账号上问我有没有这个helper, 那个helper,于是萌生了收集全部helper的念头,以便日后使用....

osc_qedw9vk0
14分钟前
5
0
flutter开发如何修改APP的名称和图标

1.安卓 2.修改APP名,不是软件里面显示的,而是桌面上应用名称 路径 /android/app/src/main/AndroidManifest.xml android:label="flutterapp" 改换这里的值 3.修改APP图标 路径 /android/app......

一代码农码一代
14分钟前
21
0
PDF文件水印怎么去掉?迅捷PDF编辑器PC的操作方法

PDF文件水印怎么去掉?现在PDF文件被广泛应用于各个办公场景之中,PDF文件的修改也是我们经常讨论的话题。编辑文件时,我们需要使用pdf编辑器。那么,如果文件中有水印,如何删除水印?应该有...

玛哈菲亚
15分钟前
17
0
基于 abp vNext 和 .NET Core 开发博客项目 - 用AutoMapper搞定对象映射

上一篇文章(https://www.cnblogs.com/meowv/p/12961014.html)集成了定时任务处理框架Hangfire,完成了一个简单的定时任务处理解决方案。 本篇紧接着来玩一下AutoMapper,AutoMapper可以很方便...

osc_tzzfwr6n
15分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部