分组统计group by
- 使用group by子句对列进行分组
SELECT column1,column2,column3… FROM table GROUP BY column - 使用having子句对分组后的结果进行过滤
SELECT column1,column2,column3… FROM table GROUP BY column HAVING 过滤条件 - 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;
- 如果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相关推荐
- MongoDb数组操作 - unwind解包、group分组统计、sort排序
MongoDB统计文档(Document)的数组(Array)中的各个元素出现的次数 一,问题描述 [使用 unwind 操作符 "解包" Document 里面的Array中的每 ...
- sql分组查询group by结合count,sum统计语句的实现(附带sql详细分析步骤)
日常写代码经常会遇到数据统计的业务场景,分组查询 group by 结合 count 和 sum 的复杂语句写起来容易令人头大,在这里分享两个比较复杂的统计场景,提供详细分析思路和最终sql语句,希望 ...
- mysql group by分钟_sql group by hour 按小时分组统计
Time字段以小时分组统计 select datepart(hour,time) hour,count(1) count from table where Similarity<75 group ...
- R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(样本个数、均值、标准差、中位数、剔除异常均值、最小最大值、数据范围极差、偏度、峰度、均值标准差等)
R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(Summary statistics by group using describe.by() in the ...
- 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 ...
- oracle的高级分组函数,group by 高级函数使用
在使用group by常用的基本函数包括min,max,avg,sum,count等,除了基本函数oracle中提供了一些高级分组函数, Rollup,Cube,Grouping,Grouping s ...
- Elasticsearch Aggregation 多个字段分组统计 Java API实现
2019独角兽企业重金招聘Python工程师标准>>> 现有索引数据: index:school type:student ----------------------------- ...
- Oracle之数据操作__分组统计查询
一. 统计函数 1. COUNT(*),COUNT(字段),COUNT(DISTNCT 字段) SELECT COUNT(*),COUNT(ename),COUNT(comm),COU ...
- mysql十分钟分组_MYSQL每隔10分钟进行分组统计的实现方法
前言 本文的内容主要是介绍了mysql每隔10分钟进行分组统计的实现方法,在画用户登录.操作情况在一天内的分布图时会非常有用,之前我只知道用「存储过程」实现的方法(虽然执行速度快,但真的是太不灵活了) ...
最新文章
- 安装最新版git,git升级
- Android studio 的 配置与安装
- C指针原理(39)-GLIB
- BM2 链表内指定区间反转
- java的classpath
- 老司机找bug的心路历程
- Windows Serer2003域升级到Windows Server2008R2域
- redis同步到磁盘
- 121道分布式面试题和答案,25K妥妥的
- SQL存储过程、存储函数
- 在校大学生如何规划自己的程序员之路
- 使用密码查看器查看软件的密码
- Lumion 9.0 动画渲染的10个技术技巧
- 开源Go语言数值算法库 An open numerical library purely based on Go programming language
- html实现展开余下全文多个,DIV+css内容太长,实现点击展开余下全文
- 【Linux】【编译相关】execvp: /bin/sh: Argument list too long问题处理小结
- jquery创建html标签并添加样式
- Opencv (一) 边缘检测
- 了解一下ACM/ICPC比赛时间
- 【OpenCV入门指南】第十篇 彩色直方图均衡化
热门文章
- 靶向嵌合体PEG-ethoxycarbonyl-propanoic/Dodecaethylene glycol
- ltspice语言中文_LTspice下载|LTspice(电路仿真软件)下载v4.14r 中文免费版 附安装教程 - 欧普软件下载...
- 【第七章】 对JDBC的支持 之 7.1 概述 ——跟我学spring3
- [rosrun] Couldn‘t find executable named.....
- 从零学习 InfiniBand-network架构(三) —— IB核心传输引擎Queue Pair
- stm32的点亮led的基础知识
- 大学冷知识「高校的学生也有专属昵称」
- Linux系统编程1——系统函数
- 学java用什么软件_学java需要用到什么软件?用哪个软件比较好?
- 哈理工 第五届程序设计大赛——B.沼跃鱼