深入浅出SQL教程之Group by和Having

在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

SELECT SUM(population) FROM bbc

这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。

通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。

HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前。而 HAVING子句在聚合后对组记录进行筛选。

让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。

SQL实例:

一、显示每个地区的总人口数和总面积:

以下为引用的内容:
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region

先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

以下为引用的内容:
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000

在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

相反,HAVING子句可以让我们筛选成组后的各组数据。

时间: 2024-10-22 03:33:40

深入浅出SQL教程之Group by和Having的相关文章

深入浅出SQL教程之SELECT语句中的表连接

为了从两个或多个表中选出数据,我们一般使用表连接来实现这个功能. 本节介绍join(连接)的概念. 为此我们准备了两个试验用表: album(专辑表) 和 track(曲目表). 专辑表:包含200首来自Amazon的音乐CD的概要信息. album(asin, title, artist, price, release, label, rank) 曲目表:每张专辑中的曲目(因为是音乐CD,所以也可叫歌曲)的详细信息. track(album, dsk, posn, song) SQL短语 FR

深入浅出SQL教程之SELECT语句的自连接

到目前为止,我们连接的都是两张不同的表,那么能不能对一张表进行自我连接呢?答案是肯定的. 有没有必要对一张表进行自我连接呢?答案也是肯定的. 表的别名: 一张表可以自我连接.进行自连接时我们需要一个机制来区分一个表的两个实例. 在FROM clause(子句)中我们可以给这个表取不同的别名, 然后在语句的其它需要使用到该别名的地方用dot(点)来连接该别名和字段名. 我们在这里同样给出两个表来对自连接进行解释. 爱丁堡公交线路, 车站表: stops(id, name) 公交线路表: route

Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法_php实例

本文实例讲述了Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法.分享给大家供大家参考,具体如下: 同时公司又要开发一个群组功能..我也就想运用一下Zend_Form来实现创建群组的功能.主要还是看中Zend_Form可以在写Form时候.实现服务器端的验证功能..省得我们在把数据提交到数据库的时候再验证一次..所以呢.我就看了一下这方面的手册..通过Zend Framework手册找到了相关的使用说明...最简单的使用方式就是在控制器(Controller

深入浅出SQL Server 2008 分区函数和分区表

原文:深入浅出SQL Server 2008 分区函数和分区表     当我们数据量比较大的时候,我们需要将大型表拆分为多个较小的表,则只访问部门数据的查询就可以更快的运行,基本原理就是,因为要扫描的数据变的更小.维护任务(例如,重新生成索引或备份表)也可以更快的运行.    我们可以再不通过将表物理放置在多个磁盘驱动器上来拆分表的情况下获取分区.如果将某个表放置在一个物理驱动器上,将相关表放置在另一个驱动器上,则可以提高查询性能,因为当运行涉及表间连接的查询时,多个磁盘头同时读取数据.可以使用

精彩教程之VBScript全接触

vbscript|教程 1.VBScript基础教程之一什么是 VBScript 2.VBScript基础教程之二在HTML页面中添加VBscript代码 3.VBScript基础教程之三VBScript数据类型 4.VBScript基础教程之四VBScript变量 5.VBScript基础教程之五VBScript常数 6.VBScript基础教程之六VBScript运算符 7.VBScript基础教程之七使用条件语句 8.VBScript基础教程之八使用循环语句 9.VBScript基础教程之

PHP入门教程之PHP变量与常量学习

上个月我专门介绍了PHP入门教程中关于PHP基本语法的入门学习,主要介绍了常用的几种PHP标记符,PHP语句的构成,PHP的注释等,今天的PHP入门教程我们主要学习PHP基本语法中PHP变量和常量的基础知识. 针对PHP变量入门学习,本篇入门教程分以下几部分介绍:PHP变量如何标识.PHP变量如何声明.如何给PHP变量赋值.PHP变量的类型介绍.常用PHP变量函数介绍. 针对PHP常量入门学习,主要介绍PHP常量的定义和使用方式. 一.PHP变量如何标识 所谓标识符,其实也就是PHP变量名,主要

Scott Mitchell的ASP.NET 2.0数据操作教程之十:使用GridView和DetailView实

Scott Mitchell 的ASP.NET 2.0数据操作教程之十:使用GridView和DetailView实现的主/从报表 返回"ASP.NET 2.0数据教程目录" 导言 在前面的教程我们看到了如何使用两个页面(一个主页,用于列出供应 商; 一个明细页,用于显示选定供应商提供的产品)创建主/从报表 . 这种两个页 面的报表格式也可以集中在一个页面上. 这篇教程将会使用一个GridView, 它的 每一行都包含产品的名称和单价以及一个选择按钮. 单击一个产品的选择按钮会 在同一

Python入门教程之if语句的用法

  这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 Python中的if语句是类似的其它语言的. if语句包含使用该数据进行比较,并根据比较的结果做出了决定的逻辑表达式. 语法: if语句在Python编程语言的语法是: ? 1 2 if expression: statement(s) 如果布尔表达式的计算结果为true,那么if语句块将被执行.如果if语句布尔表达式计算为false,那么第一组代码将被执行. Python编程语言的假

jquery基础教程之deferred对象使用方法

 jquery基础教程之deferred对象使用方法 一.什么是deferred对象?   开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的.   通常的做法是,为它们指定回调函数(callback).即事先规定,一旦它们运行结束,应该调用哪些函数.   但是,在回调函数方面,jQuery的功能非常弱.为了改变这一点,jQuery开发团队就设计了deferr