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
  4    王六  设计部 2300     4 	  	2010-10-03
  5    马七  设计部 2100     4 		2010-10-06
  6    赵八  销售部 3000     5 		2010-10-05
  7    钱九  销售部 3100     7 		2010-10-07
  8    孙十  销售部 3500     7 		2010-10-06 
我想列出每个部门最高薪水的结果,sql语句如下:
select dept , max(salary) AS MAXIMUM
FROM STAFF
GROUP BY DEPT  
查询结果如下:
dept       MAXIMUM
开发部      4500
设计部      2600
销售部      3500
解释一下这个结果:
1、 满足“SELECT子句中的列名必须为分组列或列函数”,因为SELECT有group by中包含的列dept;
2、“列函数对于group by子句定义的每个组各返回一个结果”,根据部门分组,对每个部门返回一个结果,就是每个部门的最高薪水。
将where子句与group by子句一起使用
分组查询可以在形成组和计算列函数之前具有消除非限定行的标准where子句。必须在group by子句之前指定where子句
例如,查询公司2010年入职的各个部门每个级别里的最高薪水

[sql] view plain copy

  1. SELECT dept,edlevel,MAX(salary) AS MAXIMUM
  2. FROM STAFF
  3. WHERE hiredate > ‘2010-01-01‘
  4. GROUP BY dept,edlevel
查询结果如下:
dept     edlevel     MAXIMUM
设计部      4             2300
设计部      5	       2600
销售部      5	       3000
销售部      7 	       3500
在SELECT语句中指定的每个列名也在GROUP BY子句中提到,未在这两个地方提到的列名将产生错误。GROUP BY子句对dept和edlevel的每个唯一组合各返回一行。
GROUP BY子句之后使用Having子句
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。因此,在GROUP BY子句后面包含了一个HAVING子句。HAVING类似于WHERE(唯一的差别是WHERE过滤行,HAVING过滤组)AVING支持所有WHERE操作符。
例如,查找雇员数超过2个的部门的最高和最低薪水:

[sql] view plain copy

  1. SELECT dept ,MAX(salary) AS MAXIMUM ,MIN(salary) AS MINIMUM
  2. FROM STAFF
  3. GROUP BY dept
  4. HAVING COUNT(*) > 2
  5. ORDER BY dept
查询结果如下:
dept     MAXIMUM       MINIMUM
设计部      2600  		2100
销售部 	3500 		3000
例如,查找雇员平均工资大于3000的部门的最高薪水和最低薪水:

[sql] view plain copy

  1. SELECT dept,MAX(salary) AS MAXIMUM,MIN(salary) AS MINIMUM
  2. FROM STAFF
  3. GROUP BY dept
  4. HAVING AVG(salary) > 3000
  5. ORDER BY dept
查询结果如下:
dept   	MAXIMUM   MINIMUM
销售部     	 3500		3000
时间: 2024-08-29 20:08:53

group by 和 having子句的相关文章

group by与having子句

group by子句 有些情况下.需要把一个表中的行分为多个组,然后将这个组作为一个整体,获得改组的一些信息,例如,获得各个部门的员工人数,或某个部门的员工的平均工资等,这时,就需要使用group by子句子句对表中的数据进行分组. 使用group by子句,可以根据表中的某一列或某几列队表中的数据行进行分组,多个列之间使用逗号分隔,如果根据多个列进行分组,oracle会首先根据第一列进行分组,然后再分出来的组中在按照第二列进行分组,以此类推. 对数据分组后,主要是使用一些聚合函数对分组后的数据

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