文档章节

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

猪刚烈
 猪刚烈
发布于 2014/10/12 11:47
字数 442
阅读 17
收藏 0
点赞 0
评论 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
海淀
程序员
sql中的group by 和 having 用法解析

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

岛主 ⋅ 2015/09/29 ⋅ 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 ⋅ 0

mysql having的用法

having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据...

new个对象 ⋅ 04/11 ⋅ 0

标准数据库中聚集函数二

1、对分组限定条件比对元组限定条件更有用。having子句中的谓词在形成分组后才起作用,因此可以使用聚集函数。 2、任何出现在having子句中,但没有被聚集的属性必须出现在group by子句中。 ...

My_SpaceYj ⋅ 2014/02/24 ⋅ 0

PostgreSQL之SELECT...GROUP BY...HAVING

1.SELECT...GROUP BY的使用 PostgreSQL9.3官方文档:http://www.postgres.cn/docs/9.3/sql-select.html#SQL-GROUPBY SELECT查询在通过了WHERE过滤器之后,生成的输出表可以继续用GROUP BY 子...

YuanyuanL ⋅ 2015/10/09 ⋅ 0

标准数据库中的聚集函数

1、聚合函数,以值的一个集合或多重集为输入,返回单个值的函数。 2、平均值:avg(),最小值min(),最大值max(),总和sum(),计数count()。sum和avg输入必须是字符集。 3、在计算平均值时保留重复...

My_SpaceYj ⋅ 2014/02/23 ⋅ 0

数据查询—聚集函数、GROUP BY子句

一、聚集函数 1.常用的聚集函数 2.注意细节 (1)如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。如果不指定DISTINCT短语或者指定ALL短语(ALL为默认值),则表示不取消重复值...

iBazinga ⋅ 2016/11/02 ⋅ 0

mysql having与where 区别与用法

having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。 SQL实例: 一、显...

Deacyn ⋅ 2014/07/02 ⋅ 0

mysql中的where和having子句的区别

having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。 SQL实例: 一、显...

yunlong-w ⋅ 2015/07/27 ⋅ 0

SQL语句简单记录,用来记录和后面扩充

One. 简单查询! 1.select语句 2.聚集函数 聚集函数的主要功能是对表在指定列名表达式的指上进行纵向统计和计算,也成为*。在Select查询语句中常用的有: eg: 1. 统计“信息管理”专业的学生...

KiTok ⋅ 2017/11/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 12分钟前 ⋅ 0

数据仓库技术概述(一看就是架构师写的,对我极其有用)

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于...

gulf ⋅ 14分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 16分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 19分钟前 ⋅ 0

vue获取input输入框的数据

用惯了jQuery,突然使用vue感觉很不习惯,有很多不同的地方,感觉是两个不同的思想来写前端的代码。jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作。而Vue则是通过...

王子城 ⋅ 21分钟前 ⋅ 0

竟然这就是面向对象的游戏设计?!

从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句。在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计。本文将概述原型继承和使用 JavaSc...

柳猫 ⋅ 26分钟前 ⋅ 2

git cmd git bash

刚用到了Git,看到windows环境下有两个命令输入窗口 第一个是可视化图形界面,第二个是CMD,第三个是Bash。 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的...

东东笔记 ⋅ 28分钟前 ⋅ 0

分布式系统CAP和Base

1、分布式系统 1.1 简介 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的...

xixingzhe ⋅ 39分钟前 ⋅ 0

查看磁盘占用情况

记一次jenkins构建失败的问题 Build step 'Send build artifacts over SSH' changed build result to UNSTABLE 网上查资料都没明确表明是什么错,回忆之前处理这样的问题。第一时间想到的是不...

ManderSF ⋅ 41分钟前 ⋅ 0

数据库管理提速:SQL解析的探索与应用

前言: SQL解析是一项复杂的技术,一般都是由数据库厂商来掌握,当然也有公司专门提供SQL解析的API。SQL解析与优化是属于编译器范畴,和C语言等其他语言的解析没有本质的区别。其中分为词法分...

java高级架构牛人 ⋅ 48分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部