where,having与 group by连用的区别

select 列a,聚合函数 from 表名 where 过滤条件 group by 列a having 过滤条件

group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选

需要注意having和where的用法区别:

1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。

2.where肯定在group by 之前

3.where后的条件表达式里不允许使用聚合函数,而having可以。

四、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:

1.执行where xx对全表数据做筛选,返回第1个结果集。

2.针对第1个结果集使用group by分组,返回第2个结果集。

3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。

4.针对第3个结集执行having xx进行筛选,返回第4个结果集。

5.针对第4个结果集排序。

例子:

完成一个复杂的查询语句,需求如下:

按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩。

分析:

1.要求显示学生姓名和平均分

因此确定第1步

?


1

select s_name,avg(score) from student

2.计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩

因此确定第2步

?


1

where score>=60 and s_name !=’jr’

3.显示个人平均分

相同名字的学生(同一个学生)考了多门科目 因此按姓名分组

确定第3步

?


1

group by s_name

4.显示个人平均分在70分以上

因此确定第4步

?


1

having avg(s_score)>=70

5.按由高到低的顺序

因此确定第5步

?


1

order by avg(s_score) desc

前面也记录一篇

http://www.2cto.com/database/201212/179348.html

五、索引

1.索引是单独的数据库对象,索引也需要被维护。

2.索引可以提高查询速度,但会降增删改的速度。

3.通过一定的查询触发,并不是越多越好。

什么时候不适合用索引?

1.当增删改的操作大于查询的操作时。

2.查询的语句大于所有语句的三分之一时。

?


1

2

创建索引语法:create index 索引名 on 表明 (列名)

删除索引语法:drop index 索引名

时间: 2024-08-01 10:44:31

where,having与 group by连用的区别的相关文章

Solr中的group与facet的区别

如果是简单的使用的话,那么Facet与group都可以用来进行数据的聚合查询,但是他们还是有很大的区别的. 首先上facet跟group的操作: Facet的例子: public voidFacetFieldQuery() throws Exception { solrServer = createSolrServer(); SolrQueryquery = newSolrQuery();//建立一个新的查询 query.setQuery("jobsName:计算机维护"); quer

SQL compute by 的使用 主要是针对与 GROUP BY 的区别

GROUP BY子句有个缺点,就是返回的结果集中只有合计数据,而没有原始的详细记录.如果想在SQL SERVER中完成这项工作,可以使用COMPUTE BY子句.COMPTE生成合计作为附加的汇总列出现在结果集的最后.当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总. 下列 SELECT 语句使用简单 COMPUTE 子句生成 titles 表中 price 及 advance 的求和总计: USE pubsSELECT type, price, advanceFROM 

iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)

XCode工程目录里面,有时你会发现2个不同颜色的文件夹,一种是蓝色的,一种是黄色的,最常见的是黄色的,我也是最近学习html5的时候,发现还有蓝色的文件夹呢, 来上图看下吧 上图所示,蓝色的是folder 黄色的是group. 那么它们有什么区别呢? 1. group 和 folder的区别 group 一般只在你的工程中是文件夹的形式,但是在本地的目录中还是以散乱的形式放在一起的,除非你是从外部以group的形式引用进来的. folder 只能作为资源,整个引用进项目,不能编译代码,也就是说

数据库中where与having区别

having 和where 都是用来筛选用的 having 是筛选组 而where是筛选记录 他们有各自的区别 1>当分组筛选的时候 用having 2>其它情况用where-----------------------------------------------------用having就一定要和group by连用,用group by不一有having (它只是一个筛选条件用的)------------------------------------------------------

SQL语句之order by 、group by、having、where

百度知道:1.order by是 按字段进行排序.. 字段后面可跟desc降序..asc升序..默认为升序2.group by是进行分组查询3.having和where都属于条件过滤 区别在于一般having是和group by连用... group by...having... 表示先分组再条件过滤而如果在group by前面有where,则是表示先条件过滤再分组 这个在实际中特殊的查询会影响到查询结果.PS: 这几条关键字是有先后顺序的,where...group by...having..

mysql ORDER BY,GROUP BY 和DISTINCT原理

前言 除了常规的Join语句之外,还有一类Query语句也是使用比较频繁的,那就是ORDERBY,GROUP BY以及DISTINCT这三类查询.考虑到这三类查询都涉及到数据的排序等操作,所以我将他们放在了一起,下面就针对这三类Query语句做基本的分析. ORDER BY 的实现与优化 在MySQL中,ORDERBY的实现有如下两种类型: 一种是通过有序索引而直接取得有序的数据,这样不用进行任何排序操作即可得到满足客户端要求的有序数据返回给客户端: 另外一种则需要通过MySQL的排序算法将存储

solrj的基本使用和Facet,Group分组

########################################################################################### Group 和 Facet的区别就是: 查询条件是跟group相关的,返回的查询结果也是跟group相关的,比如说你想要查询的结果在每个分组中都有数据采集,那么就最好用group,这样出来的数据跟group也是相关的,但是有个问题,比如说你要查询group每个采集1个,ok那么你查询的时候的条件rows就无效了(也

SQLServer 之 Group By 和 Compute By

一.GROUP BY 规则1:单值规则,跟在SELECT后面的列表,对于每个分组来说,必须返回且仅仅返回一个值. 在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据:要么就要被包含在聚合函数中. 因此,我们希望查询出每个部门,最高工资的那个人的姓名,部门,工资.我们要另寻解决方案. 解决方案1:关联子查询 SELECT 姓名,部门,工资 FROM 工资表 AS T1 WHERE NOT EXISTS (SELECT NULL FROM 工资表 AS T2 WHERE

group by 深入总结(转)

http://www.cnblogs.com/wangtao_20/archive/2011/02/23/1959792.html 一.不兼容的语法问题. 先看使用如下sql:SELECT count(*),town FROM `players` 结果会报错.从这里涉及到sql的一个原则:值的集合与一个行mysql认为是不兼容的.这里,count(*)的结果是一个值.而town列出的结果是很多行,也就是值组成的集合.所以,两者不不兼容的. 而如果加上group by,就不一样了,如下: SELE