转载:http://blog.csdn.net/oathevil/article/details/5521757

where和having:

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

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

聚合函数:

“聚合函数”:SQL语言中一种特殊的函数。例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

比如:

SELECT SUM(population) FROM table;

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

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

HAVING和WHERE:

WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY子句和HAVING子句前;

HAVING子句可以让我们筛选成组后的各组数据,在聚合后对组记录进行筛选。

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(population)>1000000

说明:在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录,就是SUM(population);相反,HAVING子句可以让我们筛选成组后的各组数据。

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

备注:

1.分组筛选后用having,一定与group by连用。group by可以单独使用,作为筛选条件。

2.条件里面的字段不是数据库表里面原有的字段要用having。

having的用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

  10. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

随机推荐

  1. 关于for循环与setTimeout的延迟

    在for循环中使用setTimeout时,想使其每个setTimeout在上一个setTimeout的基础上进行延时,使用传入数组方式设置时间时,发现实际是按照每次设置的setTimeout的延时执行 ...

  2. Shell命令-系统信息及显示之uname、hostname

    文件及内容处理 - uname.hostname 1. uname:显示系统信息 uname命令的功能说明 uname 命令用于显示系统信息.uname 可显示电脑以及操作系统的相关信息 uname命 ...

  3. 其它综合-CentOS7 忘记root密码

    CentOS7 忘记root密码 长时间不用的 CentOS 机器再次开机的时候忽然忘记了密码,总不能就重装一台吧,还有好多服务在机器上,于是决定重置root的密码. 如果是已经开启的机器,需要进行关 ...

  4. Java基础:Java简介及安装配置(1)

    Java简介 Java是Sun公司于1995年推出的高级编程语言,具有跨平台特性,编译后的程序能够运行在多种类型的操作系统平台上. 1.1 Java应用程序版本 Java的3个独立用于开发不同类型应用 ...

  5. Python——Django-urls.py的作用

    一.urls.py的作用是保存路径和函数的对应关系 二.函数返回指定内容 from django.urls import path #引用HTTP协议的代码 from django.shortcuts ...

  6. 使用按钮触发element 时间事件 --时间戳

    本日 本周 本月 本年  时间按钮   date 组件内添加 pickerOptions2: { shortcuts: [ { text: '今日', onClick(picker) { picker ...

  7. python基础之小数据池、代码块、编码和字节之间换算

    一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...

  8. TsinsenA1221 大楼【矩阵快速幂】

    题目分析: 重新定义矩阵运算,$*$等价于$+$,$+$等价于$max$. 然后倍增一下,再二分一下. 代码: #include<bits/stdc++.h> using namespac ...

  9. rest framework 视图,路由

    视图 在上面序列化的组件种已经用到了视图组件,即在视图函数部分进行逻辑操作. 但是很明显的弊端是,对每个表的增删改查加上 单条数据,需要用到 2个类 5个方法(增删改查,单数据查)才可以完整的实现,当 ...

  10. tmux 使用说明

    安装Mac:brew install tmux若未安装libevent,需要先brew install libeventCentos:yum -y install tmuxUbuntu:apt-get ...