`
javahigh1
  • 浏览: 1223593 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

这是一个很有意思的问题,仔细地想一下其实很有道理。我们知道,聚集函数也叫列函数,它们都是基于整列数据进行计算的,而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);

分享到:
评论

相关推荐

    oracle中where 子句和having子句中的区别介绍

    3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以  Where和Having都是对查询结果的一种筛选,说的书面点就是设定条件的语句。下面分别说明其用法和异同点。 注:本文使用字段为oracle数据库...

    数据库课程梳理——SElECT

    SELECT语句详细分析 文章目录SELECT语句详细分析单表查询统计函数(聚集函数)WHERE子句ORDER/GROUP BY子句HAVING子句连接...聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句,而不能用于WHERE子句。 函数 说明

    第二次作业反馈1

    1. 常见问题 2. WHERE 子句是不能含有聚集函数的,这可以参见mysql手册的SELECT Syntax 3. HAVING 子句在标准SQL中只能用分

    2009达内SQL学习笔记

    ORDER BY子句中使用的列将是为显示所选择的列,但是实际上并不一定要这样,用非检索的列排序数据是完全合法的。 为了按多个列排序,列名之间用逗号分开。 2、支持按相对列位置进行排序。 输入 SELECT prod_id,...

    MySQL命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5. mysql>insert into MyClass values(1,’Tom’,96.45),(2,’Joan...

    MYSQL常用命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5. mysql> insert into MyClass values(1,'Tom',96.45),(2,...

    熟练掌握 openGauss 单表查询的语法结构及其使用方法  掌握设计正确查询语句以实现查询要求的方法 -简单单表查询(

    -模糊查询、聚集函数、分组统计和排序  掌握 Group by 的使用  正确区分元组过滤条件(WHERE 子句)和分组过滤条件(HAVING 短语)的异同  掌握 Order by 的使用  掌握使用 DISTINCT 实现查询结果的去重...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    4.3.6 where子句中的常用操作符 4.4 基本的update和delete语句 4.4.1 update语句 4.4.2 delete语句 4.5 数据排序 4.6 函数:字符串函数、数字函数和聚集函数(不是分组) 4.6.1 字符串函数 4.6.2 数字函数 4.6.3 ...

    hql语句语法详解hql语句

    下面介绍HQL语句的语法 1.from子句 2.select子句 3.聚集函数 4.多态查询 5.where子句 6.表达式 7.order by子句 8.group by子句 9.子查询语句 10.fetch关键字 11.命名查询

    oracle select执行顺序的详解

    2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;6、计算所有的表达式;7、使用order by对结果集进行排序。oracle 语句...

    mysql数据库的基本操作语法

    非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。 Null类型特征: 所有的类型的值都可以是null,包括int、float等数据类型 空字符串“”是不等于null,0也不等于null create table temp( id ...

    Oracle Database 11g初学者指南--详细书签版

    4.3.6 where子句中的常用操作符 86 4.4 基本的update和delete语句 87 4.4.1 update语句 87 4.4.2 delete语句 88 4.5 数据排序 90 4.6 函数:字符串函数、数字函数和聚集函数(不是分组) 91 4.6.1 字符串函数 ...

    SQL Select语句完整的执行顺序

    举例说明: 在学生成绩表中 (暂记为 tb_Grade), 把 “考生姓名”内容不为空的记录按照 “考生姓名” 分组, 并且筛选分组结果, 选出 “总成绩” 大于 600 分的. 标准顺序的 SQL 语句为: Select 考生姓名, max(总成绩)...

    数据透视表SQL语句入门

    四、聚集函数 count(distinct/all 列名):统计元组个数 sum:求和 avg:求平均值 max:最大值 min:最小值 例14、查询材料进货明细表中天津大小头的最大数量。 SELECT max(数量) FROM [材料进货明细表$] where 定额名称 ...

    最全Hibernate 参考文档

    14.7. where子句 14.8. 表达式 14.9. order by子句 14.10. group by子句 14.11. 子查询 14.12. HQL示例 14.13. 批量的UPDATE & DELETE语句 14.14. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个...

    Hibernate HQL教程

    1.1.19 聚集函数 11 1.2 HQL进阶 12 1.2.1 查询类及其所有继承的类的实例 12 1.2.2 限制每次查询的返回对象数 12 1.2.3 绑定参数 14 1.2.4 在映射文件配置HQL语句 15 1.3 HQL的嵌套子查询 15 1.3.1 嵌套子查询的概念...

    SQL必知必会(第3版)--详细书签版

     本书采用等宽字体表示代码,读者输入的文本与应该出现在屏幕上的文本也以等宽字型给出。如:  It will look like this to mimic the way text looks on your screen.  代码行前的箭头( )表示行中代码太长,...

    OCA认证考试指南1Z0-051

    3.1.1 WHERE子句 3.1.2 比较运算符 3.1.3 布尔运算符 3.2 排序查询检索的行 3.3 和符号(&)替换 3.3.1 替换变量 3.3.2 定义和验证 3.4 认证小结 3.5 本章 测试题 3.5.1 自测题 3.5.2 实验题 ...

    SQL COOKBOOK(压缩1/2)

    1.6在WHERE子句中引用取别名的列 1.7连接列值 1.8在SELECT语句中使用条件逻辑 1.9限制返回的行数 1.10从表中随机返回n条记录 1.11查找空值 1.12将空值转换为实际值 1.13按模式搜索 第2章 查询结果排序 2.1...

    SQL COOKBOOK(压缩2/2)

    1.6在WHERE子句中引用取别名的列 1.7连接列值 1.8在SELECT语句中使用条件逻辑 1.9限制返回的行数 1.10从表中随机返回n条记录 1.11查找空值 1.12将空值转换为实际值 1.13按模式搜索 第2章 查询结果排序 2.1...

Global site tag (gtag.js) - Google Analytics