转自:mysql必知必会——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语句如下:
  1. select dept , max(salary) AS MAXIMUM
  2. FROM STAFF
  3. 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年入职的各个部门每个级别里的最高薪水
  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个的部门的最高和最低薪水:
  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的部门的最高薪水和最低薪水:
  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

SQL之group by 和 having的更多相关文章

  1. sql语句Group By用法-转载

    sql语句Group By用法一则 2007-10-25 12:00 sql语句Group By用法一则 如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么 ...

  2. MYSQL:SQL中Group By的使用

    SQL中Group By的使用   1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By ...

  3. C# Linq to sql 实现 group by 统计多字段 返回多字段

    Linq to sql 使用group by 统计多个字段,然后返回多个字段的值,话不多说,直接上例子: where u.fy_no == fy_no orderby u.we_no group u  ...

  4. MySQL 使用profile分析慢sql,group left join效率高于子查询

    MySQL 使用profile分析慢sql,group left join效率高于子查询 http://blog.csdn.net/mchdba/article/details/54380221 -- ...

  5. 转载:SQL中Group By 的常见使用方法

    SQL中Group By 的常见使用方法  转载源:http://www.cnblogs.com/wang-meng/p/5373057.html 前言今天逛java吧看到了一个面试题, 于是有了今天 ...

  6. SQL 之 Group By

    SQL 之 Group By Group By从字面意义上理解就是根据By指定的规则对数据进行分组,所谓的分组就是将一个数据表划分成若干个小区域. 例如:有这么一张表

  7. sql中group by用来干嘛的

    sql中group by用来干嘛的 一.总结 一句话总结: 1.group by用来分类汇总的,by后面接要分的类 2.group by既然是分类汇总,那就要和聚合函数结合使用,因为要汇总啊 3.ha ...

  8. SQL中Group By的使用

    1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...

  9. SQL中Group By 的使用

    1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简 ...

  10. [数据库]SQL中Group By 的常见使用方法.

    前言今天逛java吧看到了一个面试题, 于是有了今天这个文章, 回顾下Group By的用法.题目如下:Select name from table group by name having coun ...

随机推荐

  1. svg image标签降级技术

    1.svg image标签降级技术: svg不能很好的在anroid2.3中得到支持,需要额外的补充,IE8-以及Android 2.3默认浏览器是不支持SVG的. svg image标签降级技术,这 ...

  2. 使用word2vec训练中文词向量

    https://www.jianshu.com/p/87798bccee48 一.文本处理流程 通常我们文本处理流程如下: 1 对文本数据进行预处理:数据预处理,包括简繁体转换,去除xml符号,将单词 ...

  3. 从数据库中取 datetime类型,界面展示 yyyy-MM-dd

    //处理提问时间,去掉时分秒 if(array!=null && array.size()>0){ for(int i=0;i<array.size();i++){ JSO ...

  4. .NET MVC-去掉验证

    将@Html.ValidationMessage("sortid")代码去掉 将if (ModelState.IsValid)验证代码去掉

  5. Introduction to the visual formatting model

    原文:https://www.w3.org/TR/CSS2/visuren.html#block-formatting --------------------------------------- ...

  6. RAMPS1.4 3d打印控制板接线与测试5

    切片软件是生产打印机主控板可以识别的代码(Gcode)的工具,没有这个软件的帮忙,打印机不能识别3d模型文件.这里暂时只介绍Slic3r这个切片软件.简单好用功能强大. 1.打开expert模式 Sl ...

  7. nodejs发送请求

    const https = require('https'); var options = { hostname: 'registry.yarnpkg.com', port: 443, path: ' ...

  8. Android7.0新特性,及Android N适配

    新特性部分 Android 7.0 Nougat 提供新功能以提升性能.生产效率和安全性,主要新增了下面的新特性和优化: 一.新的Notification Android N 添加了很多新的notif ...

  9. Vim的行号、语法显示等设置(.vimrc文件的配置)以及乱码解决

    在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进 等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc.在启动vim时,当前用户 ...

  10. 获取oracle 随机数

    http://www.cnblogs.com/lgzslf/archive/2008/11/29/1343685.html select substr(dbms_random.random,2,2) ...