group by与having子句

group by子句

有些情况下。需要把一个表中的行分为多个组,然后将这个组作为一个整体,获得改组的一些信息,例如,获得各个部门的员工人数,或某个部门的员工的平均工资等,这时,就需要使用group by子句子句对表中的数据进行分组。

使用group by子句,可以根据表中的某一列或某几列队表中的数据行进行分组,多个列之间使用逗号分隔,如果根据多个列进行分组,oracle会首先根据第一列进行分组,然后再分出来的组中在按照第二列进行分组,以此类推。

对数据分组后,主要是使用一些聚合函数对分组后的数据进行统计。

具体的操作如下:

SQL> select empno,deptno from emp;

EMPNO     DEPTNO

---------- ----------

7369         20

7499         30

7521         30

7566         20

7654         30

7698         30

7782         10

7788         20

7839         10

7844         30

7876         20

7900         30

7902         20

7934         10

7935         20

如上面的数据所示,在deptno在的数据值只有10,20,30,那么如果我们想统计下属于部门10,20,30的各个部门各有多少人,我们可以使用以下的语句:

SQL> select deptno "部门编号",count(*) "部门人数" from emp group by deptno;

部门编号   部门人数

---------- ----------

30          6

20          6

10          3

我们也可以统计各个部门的平均工资,如下:

SQL> select deptno,avg(sal) from emp group by deptno;

DEPTNO   AVG(SAL)

---------- ----------

30 1708.33333

20 2645.83333

10 2916.66667

group by和having的使用。

having子句

having子句通常与group by子句一起使用,在完成对分组结果的统计后,可以使用having子句对分组的结果进行进一步的筛选。

一个having子句最多可以包含40个表达式,having子句的表达式之间使用关键字and和or分隔。

如下所示,对已经完成分组的部门,我们选出部门人数大于5的部门。

SQL> select deptno "部门编号",count(*) "部门人数" from emp group by deptno having count(*)>5;

部门编号   部门人数

---------- ----------

30          6

20          6

分组后选出部门编号大于10的部门

SQL> select deptno,avg(sal) from emp group by deptno having deptno>10;

DEPTNO   AVG(SAL)

---------- ----------

30 1708.33333

20 2645.83333

时间: 2024-11-15 10:41:51

group by与having子句的相关文章

group by 和 having子句

GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. select子句中的列名必须为分组列或列函数,列函数对于group by子句定义的每个组返回一个结果. 某个员工信息表结构和数据如下:   id  name  dept  salary  edlevel  hiredate    1 张三 开发部 2000 3 2009-10-11   2 李四 开发部 2500 3 2009-10-01   3 王五 设计部 2600 5 2010-10-02  

SQL group 分组查询

1.使用group by进行分组查询  在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:  被分组的列 为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数group by的使用在这只写几个例子吧:例: select courseID,avg(score) as 课程平均成绩 from score group by courseID 例: select studentID as 学员编号,courseID as 内部测试,a

mysql中的where和having子句的区别

mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. SQL实例: 一.显示每个地区的总人口数和总面积. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region 先以region把返回记录分成多个组,这就是GROUP BY的

where和having子句的区别

having子句可以让我们筛选成组后的各种数据,having子句在查询过程中慢于聚合语句 having的用法 having子句可以让我们筛选成组后的各种数据,having子句在查询过程中慢于聚合语句(sum,min,max,avg,count).而where子句在查询过程中则快于聚合语句(sum,min,max,avg,count). SQL实例: 一.显示每个地区的总人口数和总面积. 1 2 SELECT region, SUM(population), SUM(area) FROM bbc

小贝_mysql select5种子句介绍

mysql select5种子句介绍 简要 一.五种字句 二.具体解释五种字句 一.五种字句 where.group by.having.order by.limit 二.具体解释五种字句 2.1.理解where子句 理解select 列1.列2- fromtable where where子句 a. 把where子句看成表达式.到table中查询满足表达式成立的行 b. 上述查询语句的运行顺序.先找到表table后.再运行where子句.满足表达式后进行展示. c.比較运算符和逻辑运算符 2.

Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页

GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group by deptno; --根据部门分组,并统计 Select deptno, count(*) form emp group by deptno; select deptno, avg(sal) from emp group by deptno; --每个部门的平均工资 HAVING子句 用于指定

聚合查询,group by,where,having

在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count).简单说来:where子句:select sum(num) as rmb from order where id>10//只有先查询出id大于10的记录才能进行聚合语句 having子句:select reportsto as manager, count(*) as reports from empl

Oracle之Group by和Having-----转了

在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条记录上.SELECT SUM(population) FROM bbc 这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数. 通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用.当你指定 GROUP

一.oracle的SQL中group by使用的情况(与聚合函数的关系)

SELECT r.industry_1,r.industry_2,r.agent_id,r.agent_name,COUNT(DISTINCT r.customer_name_a)数据总量,COUNT(DISTINCT CASE WHEN r.ifhs='Y' THEN r.customer_name_a END)海关数据量,COUNT(DISTINCT CASE WHEN r.ifgjh='Y'THEN r.customer_name_a END)广交会数据量,COUNT(DISTINCT C