1. 使用group by子句对列进行分组
    SELECT column1,column2,column3… FROM table GROUP BY column
  2. 使用having子句对分组后的结果进行过滤
    SELECT column1,column2,column3… FROM table GROUP BY column HAVING 过滤条件
  3. GROUP BY 用于对查询的结果分组统计,HAVING 子句用于限制分组显示结果
USE db_02;
#创建部门表
CREATE TABLE dept(
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
dname VARCHAR(20) NOT NULL DEFAULT '',
loc VARCHAR(13) NOT NULL DEFAULT ''
);INSERT INTO dept VALUES
(10,'ACCOUNTING','NEW YORK'),
(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),
(40,'OPERATIONS','BOSTON')
SELECT * FROM dept;#创建emp员工表
CREATE TABLE emp(
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*编号*/
ename VARCHAR(20) NOT NULL DEFAULT '',/*名字*/
job VARCHAR(9) NOT NULL DEFAULT '',/*工作*/
mgr MEDIUMINT UNSIGNED,/*上级编号*/
hiredate DATE NOT NULL,/*入职时间*/
sal DECIMAL(7,2) not null,/*薪水*/
comm DECIMAL(7,2),/*红利*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0/*部门编号*/
);
delete FROM emp;
INSERT INTO emp VALUES
(7369,'SMITH','CLERK',7902,'1990-12-27',800.00,NULL,20),
(7499,'ALLEN','SALESMAN',7698,'1991-2-20',1600.00,300.00,30),
(7521,'WARD','SALESMAN',7698,'1961-2-22',1250.00,500.00,30),
(7566,'JONES','MANAGER',7839,'1967-4-2',2975.00,NULL,20),
(7654,'MARTIN','SALESMAN',7698,'1958-9-28',1200.00,1400.00,30),
(7668,'REWRJH','SALESMAN',7698,'1955-2-20',1600.00,300.00,20),
(7658,'GFSJHB','SALESMAN',7698,'1911-2-20',1600.00,300.00,40),
(7656,'DWDG','SALESMAN',7698,'1959-2-20',1600.00,300.00,10),
(7661,'DGUE','SALESMAN',7698,'1934-2-20',1600.00,300.00,20),
(7458,'FORH','SALESMAN',7698,'1983-2-20',1600.00,300.00,40),
(7156,'MILLER','SALESMAN',7698,'1964-2-20',1600.00,300.00,10);
SELECT * FROM emp;#创建工资等级表
CREATE TABLE salgrade(
grade MEDIUMINT UNSIGNED not NULL DEFAULT 0,/*工资级别*/
losal DECIMAL(17,2) not null,/*该级别最低工资*/
hisal  DECIMAL(17,2) not null/*该级别最高工资*/
);INSERT INTO salgrade VALUES(1,700,1200);
INSERT INTO salgrade VALUES(2,1200,1400);
INSERT INTO salgrade VALUES(3,1400,2000);
INSERT INTO salgrade VALUES(4,2000,3000);
INSERT INTO salgrade VALUES(5,3000,9000);
SELECT *  FROM salgrade;#演示group by + having
#GROUP BY用于对查询的结果分组统计
#having子句用于限制分组显示结果
#1.求每个部门最高工资和平均工资
SELECT avg(sal),max(sal),deptno FROM emp
GROUP BY deptno;
#2.求每个部门每种岗位最低工资和平均工资
SELECT avg(sal),max(sal),deptno,job FROM emp
GROUP BY deptno,job;
#3.显示平均工资低于2000的部门号和它的平均工资
SELECT avg(sal),deptno FROM emp GROUP BY deptno HAVING avg(sal)<=2000;
#可以使用别名
SELECT avg(sal) avg_sal,deptno FROM emp GROUP BY deptno HAVING avg_sal<=2000;
  1. 如果SELECT语句同时包含有group by、having、limit、order by,那么他们的先后顺序是group by、having、order by、limit
#增强group by的使用
use db_02;
#1.显示每种岗位的员工总数、平均工资
SELECT  COUNT(*),FORMAT(avg(sal),2),job FROM emp GROUP BY job;
#2.显示员工总数以及获得奖金的员工数
SELECT COUNT(*),COUNT(comm) FROM emp;
#3.显示销售的总人数
SELECT COUNT(job),job FROM emp group BY job HAVING job='SALESMAN';
#4.显示员工工资的最大差值
SELECT max(sal)-MIN(sal) FROM emp;#应用:统计平均工资大于1000的部门,并且按照工资降序排序,取出前两行
SELECT avg(sal) as avg_sal,deptno FROM emp
GROUP BY deptno
HAVING avg_sal>1000
ORDER BY avg_sal DESC
LIMIT 0,2;

分组统计group by相关推荐

  1. MongoDb数组操作 - unwind解包、group分组统计、sort排序

    MongoDB统计文档(Document)的数组(Array)中的各个元素出现的次数 一,问题描述 [使用 unwind 操作符 "解包" Document 里面的Array中的每 ...

  2. sql分组查询group by结合count,sum统计语句的实现(附带sql详细分析步骤)

    日常写代码经常会遇到数据统计的业务场景,分组查询 group by 结合 count 和 sum 的复杂语句写起来容易令人头大,在这里分享两个比较复杂的统计场景,提供详细分析思路和最终sql语句,希望 ...

  3. mysql group by分钟_sql group by hour 按小时分组统计

    Time字段以小时分组统计 select datepart(hour,time) hour,count(1) count from table where Similarity<75 group ...

  4. R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(样本个数、均值、标准差、中位数、剔除异常均值、最小最大值、数据范围极差、偏度、峰度、均值标准差等)

    R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(Summary statistics by group using describe.by() in the  ...

  5. sql server 经典SQL——分组统计

    一.分组统计 数据 name dtdate result aa 2017-01-04 1 aa 2017-01-04 1 aa 2017-01-05 1 aa 2017-01-05 0 bb 2017 ...

  6. oracle的高级分组函数,group by 高级函数使用

    在使用group by常用的基本函数包括min,max,avg,sum,count等,除了基本函数oracle中提供了一些高级分组函数, Rollup,Cube,Grouping,Grouping s ...

  7. Elasticsearch Aggregation 多个字段分组统计 Java API实现

    2019独角兽企业重金招聘Python工程师标准>>> 现有索引数据: index:school type:student ----------------------------- ...

  8. Oracle之数据操作__分组统计查询

     一. 统计函数        1. COUNT(*),COUNT(字段),COUNT(DISTNCT 字段) SELECT COUNT(*),COUNT(ename),COUNT(comm),COU ...

  9. mysql十分钟分组_MYSQL每隔10分钟进行分组统计的实现方法

    前言 本文的内容主要是介绍了mysql每隔10分钟进行分组统计的实现方法,在画用户登录.操作情况在一天内的分布图时会非常有用,之前我只知道用「存储过程」实现的方法(虽然执行速度快,但真的是太不灵活了) ...

最新文章

  1. 安装最新版git,git升级
  2. Android studio 的 配置与安装
  3. C指针原理(39)-GLIB
  4. BM2 链表内指定区间反转
  5. java的classpath
  6. 老司机找bug的心路历程
  7. Windows Serer2003域升级到Windows Server2008R2域
  8. redis同步到磁盘
  9. 121道分布式面试题和答案,25K妥妥的
  10. SQL存储过程、存储函数
  11. 在校大学生如何规划自己的程序员之路
  12. 使用密码查看器查看软件的密码
  13. Lumion 9.0 动画渲染的10个技术技巧
  14. 开源Go语言数值算法库 An open numerical library purely based on Go programming language
  15. html实现展开余下全文多个,DIV+css内容太长,实现点击展开余下全文
  16. 【Linux】【编译相关】execvp: /bin/sh: Argument list too long问题处理小结
  17. jquery创建html标签并添加样式
  18. Opencv (一) 边缘检测
  19. 了解一下ACM/ICPC比赛时间
  20. 【OpenCV入门指南】第十篇 彩色直方图均衡化

热门文章

  1. 靶向嵌合体PEG-ethoxycarbonyl-propanoic/Dodecaethylene glycol
  2. ltspice语言中文_LTspice下载|LTspice(电路仿真软件)下载v4.14r 中文免费版 附安装教程 - 欧普软件下载...
  3. 【第七章】 对JDBC的支持 之 7.1 概述 ——跟我学spring3
  4. [rosrun] Couldn‘t find executable named.....
  5. 从零学习 InfiniBand-network架构(三) —— IB核心传输引擎Queue Pair
  6. stm32的点亮led的基础知识
  7. 大学冷知识「高校的学生也有专属昵称」
  8. Linux系统编程1——系统函数
  9. 学java用什么软件_学java需要用到什么软件?用哪个软件比较好?
  10. 哈理工 第五届程序设计大赛——B.沼跃鱼