“Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。

“Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。

聚合函数,SQL基本函数,聚合函数对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。

Transact-SQL编程语言提供下列聚合函数:

1.AVG 返回指定组中的平均值,空值被忽略。

例:select prd_no,avg(qty) from sales group by prd_no

2. COUNT 返回指定组中项目的数量。

例:select count(prd_no) from sales

3. MAX 返回指定数据的最大值。

例:select prd_no,max(qty) from sales group by prd_no

4. MIN 返回指定数据的最小值。

例:select prd_no,min(qty) from sales group by prd_no

在说区别之前,得先介绍GROUP BY这个子句,而在说GROUP子句前,又得先说说“聚合函数”——SQL语言中一种特殊的函数。例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
如:

SELECT SUM(population) FROM vv_t_bbc ;

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

下面再说说“HAVING”和“WHERE”:

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

  让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句:

  SQL实例:

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

SELECT region, SUM(population), SUM(area)FROM bbcGROUP BY region

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

SELECT region, SUM(population), SUM(area)FROM bbcGROUP BY regionHAVING SUM(population)>1000000

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

ps:如果想根据sum后的字段进行排序可以在后面加上:order by sum(population) desc/asc

更多相关文章

  1. android上一些方法的区别和用法的注意事项
  2. Android系统配置数据库注释(settings.db)
  3. Android中的FILL_PARENT与WRAP_CONTENT的区别
  4. [Android] ACTION_GET_CONTENT与ACTION_PICK的区别
  5. android上一些方法的区别和用法的注意事项
  6. linearLayout 和 relativeLayout的属性区别
  7. Android(安卓)中数据库查询方法 query() 中的 select
  8. [置顶] android orm映射框架(类似hibernate)基本使用
  9. Android:getWritableDatabase/getReadableDatabase无法调用onCre

随机推荐

  1. Android需要复合人才
  2. Android 上如何移植live555生成库文件
  3. android总结之android初识
  4. Android UI系列
  5. android 屏幕适配
  6. Android真的很火吗?
  7. Android(Xamarin)之旅(五)
  8. Android动画设计第3弹
  9. Android基础备忘(android中的分享功能)
  10. Android的BUG - 广为人知的诟病:频繁重启