分组统计查询(学习笔记)

查询出公司每个月支出的工资总和

--查询出公司每个月支出的工资总和
SELECT SUM(sal) FROM emp;

查询出公司的最高工资,最低工资和平均工资

--查询出公司的最高工资,最低工资和平均工资
SELECT MAX(sal),MIN(sal),ROUND(AVG(sal),2) FROM emp;

统计出公司最早雇佣和最晚雇佣的雇佣日期

--统计出公司最早雇佣和最晚雇佣的雇佣日期
SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期 FROM emp ;

统计公司工资之中中间的工资值

--统计公司工资之中中间的工资值
SELECT MEDIAN(sal) FROM emp ;

验证COUNT(*)、COUNT(字段)、COUNT(DISTINCT 字段)的使用区别

--验证COUNT(*)、COUNT(字段)、COUNT(DISTINCT 字段)的使用区别
SELECT COUNT(*) , COUNT(ename) , COUNT(comm) , COUNT(DISTINCT job) FROM emp ;

分组统计语法

SELECT [DISTINCT]  分组字段 [AS] [列别名] ,... | 统计函数 [AS] [别名] , ….
    FROM 表名称1 [表别名1] , 表名称2 [表别名2] ….
    [WHERE 条件(s)]
    [GROUP BY 分组字段]
    [ORDER BY 排序字段 ASC|DESC] ;

单字段分组统计

统计出每个部门的人数

--统计出每个部门的人数
SELECT COUNT(empno)
FROM emp
GROUP BY deptno; 

统计出每种职位的最低、最高工资

--统计出每种职位的最低、最高工资
SELECT job,MIN(sal) 最低工资,MAX(sal) 最高工资
FROM emp
GROUP BY job;

查询出每个部门的名称,部门人数,部门平均工资,平均服务年限

--查询出每个部门的名称,部门人数,部门平均工资,平均服务年限
SELECT d.dname,COUNT(e.empno),ROUND (AVG(e.sal),2),ROUND(AVG (months_between(SYSDATE,e.hiredate)/12),2)
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.dname;

查询出公司各个工资等级雇员的数量、平均工资。

--查询出公司各个工资等级雇员的数量、平均工资。
SELECT s.grade,COUNT(e.empno),ROUND (AVG(e.sal),2)
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal
GROUP BY s.grade;

统计领取佣金与不领取佣金的员工的平均工资,平均入职年限,员工人数

--统计领取佣金与不领取佣金的员工的平均工资,平均入职年限,员工人数--comm是空内容不能直接分组,用集合来完成
SELECT ROUND(AVG(e.sal),2),ROUND(AVG(months_between(SYSDATE,e.hiredate)/12),2),COUNT(e.empno)
FROM emp e
WHERE e.comm IS NULL
UNION
SELECT ROUND(AVG(e.sal),2),ROUND(AVG(months_between(SYSDATE,e.hiredate)/12),2),COUNT(e.empno)
FROM emp e
WHERE e.comm IS NOT NULL;

多字段分组统计

--语法
SELECT [DISTINCT]  分组字段1 [AS] [列别名] , [分组字段2 [AS] [列别名] , …] | 统计函数 [AS] [别名] , ….
    FROM 表名称1 [表别名1] , 表名称2 [表别名2] ….
    [WHERE 条件(s)]
    [GROUP BY 分组字段1 , 分组字段2 , ….]
    [ORDER BY 排序字段 ASC|DESC] ;

现在要求查询出每个部门的详细信息

--现在要求查询出每个部门的详细信息,部门编号,部门名称,部门位置,部门人数,平均工资,总工资,最高、最低工资
SELECT d.deptno,d.dname,d.loc,COUNT(e.empno),AVG(e.sal),SUM(sal),MAX(sal),MIN(sal)
FROM dept d,emp e
WHERE d.deptno=e.deptno(+)
GROUP BY d.deptno,d.dname,d.loc;

HAVING子句

使用GROUP BY子句可以实现数据的分组显示,但是在很多时候往往需要对分组之后的数据进行再次的过滤,

而后再通过统计结果进行数据的过滤,而要想实现这样的功能就只能通过HAVING子句完成。

语法:

SELECT [DISTINCT]  分组字段1 [AS] [列别名] , [分组字段2 [AS] [列别名] , …] | 统计函数 [AS] [别名] , ….
    FROM 表名称1 [表别名1] , 表名称2 [表别名2] ….
    [WHERE 条件(s)]
    [GROUP BY 分组字段1 , 分组字段2 , ….]
    [HAVING 过滤条件(s)]
    [ORDER BY 排序字段 ASC|DESC] ;

查询出所有平均工资大于2000的职位信息、平均工资、雇员人数

--查询出所有平均工资大于2000的职位信息、平均工资、雇员人数
SELECT e.job,AVG(e.sal),COUNT(e.empno)
FROM emp e
GROUP BY e.job
HAVING AVG(e.sal)>2000;

列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资。

--列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资。
SELECT d.deptno,d.dname,AVG(e.sal) avgsal,MIN(e.sal),MAX(e.sal),COUNT(e.empno) 人数
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.deptno,d.dname
HAVING COUNT(e.empno)>0;

显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,
并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列

--显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,
--并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列
SELECT e.job,SUM(e.sal) sumsal
FROM emp e
WHERE e.job<>‘SALESMAN‘
GROUP BY e.job
HAVING SUM(e.sal)>5000
ORDER BY sumsal ASC;

HAVING子句是在分组之后使用,主要是为了针对分组的结果进行过滤

时间: 2025-01-07 10:50:05

分组统计查询(学习笔记)的相关文章

Oracle数据库从入门到精通-分组统计查询

视频课程:李兴华 Oracle从入门到精通 视频课程学习者:阳光罗诺 视频来源:51CTO学院 整体内容: 统计函数的使用 分组统计查询的实现 对分组的数据过滤 统计函数 在之前我们就学习过一个COUNT()函数,这个函数的主要作用是统计一张表之中的数据量的个数.和它功能与之类似的常用函数有五个: 统计个数COUNT():根据表中的实际数据量返回结果. 求和SUM():是针对于数字的统计 平均值AVG():是针对数字的统计 最小值MIN():各种数据类型都支持. 最大值MAX():各种数据类型都

机器学习-李航-统计学习方法学习笔记之感知机(2)

在机器学习-李航-统计学习方法学习笔记之感知机(1)中我们已经知道感知机的建模和其几何意义.相关推导也做了明确的推导.有了数学建模.我们要对模型进行计算. 感知机学习的目的是求的是一个能将正实例和负实例完全分开的分离超平面.也就是去求感知机模型中的参数w和b.学习策略也就是求解途径就是定义个经验损失函数,并将损失函数极小化.我们这儿采用的学习策略是求所有误分类点到超平面S的总距离.假设超平面s的误分类点集合为M,那么所有误分类点到超平面S的总距离为 显然损失函数L(w,b)是非负的,如果没有误分

010.简单查询、分组统计查询、多表连接查询(sql实例)

-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SELECT UNION --SELECT 'HAHA',1,32--UNION ALL --全部显示/显示重复数据 即使集合相同--UNION---------将查询的两个结果集合并.结构必须一致 -->常见面试题 --SELECT 'HEHE',2,33------将查询结果添加到列表中(子查询)IN

003.分组统计查询和表连接查询

--分组统计查询 group by having 1 select 分组字段 ,聚合函数 2 having 后常跟聚合函数,也可以跟分组字段 3 where 后不可以直接跟聚合函数 4 where(筛选行) -group by (分组) -having (筛选组) --表连接查询 1 笛卡尔积 (交叉连接 cross join) a*b A) SELECT * FROM A,B B) SELECT * FROM A CROSS JOIN B 2 内连接 原理: 将两个表中关联字段相等的行查询出来

分组统计查询(章节摘要)

1,在SQL中主要提供了5种分组函数,分别是COUNT(),AVG(),SUM(),MIN(),MAX()函数. 2,使用GROUP BY字句可以对数据进行分组操作,而使用HAVING字句可以对分组之后的数据进行再次过滤. 3,在分组时可以同时制定多个分组字段. 4,分组操作不仅可以用于实体表,也可以针对查询的临时表进行分组. 5,分组函数允许嵌套,但是嵌套之后的分组查询中不能再出现任何字段,包括分组字段.分组统计查询(章节摘要)

sql 分组统计查询并横纵坐标转换

关于sql 分组统计查询,我们在做报表的时候经常需要用到;今天就在这里整理下; 先附上一段sql代码: if object_id(N'#mytb',N'U') is not null drop table #mytbgodeclare @Year intset @Year=2014create table #mytb ([Date] int,[Count] int,[Price] decimal(18, 0),[spbm] varchar(50),[sppp] varchar(100),[spm

分组统计查询

分组统计查询 范例1:查找出公司每个月支出的月工资的总和 SELECT SUM(sal) FROM emp ;   范例2:查询出公司的最高工资.最低工资.平均工资 SELECT AVG(sal), ROUND(AVG(sal),2), MAX(sal), MIN(sal) FROM emp ;   范例3:统计出公司最早雇佣和最晚雇佣的雇佣日期 SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期 FROM emp ; 范例4:统计公司中间的工资

《卸甲笔记》-分组统计查询

统计函数对比 1查询出公司每个月支出的月工资总和 Oracle SQL> select SUM(sal) from emp; SUM(SAL) ---------- 29025 PPAS scott=# select SUM(sal) from emp; sum ---------- 29025.00 (1 row) 2查询出公司的最高工资,最低工资,平均工资 Oracle SQL> select AVG(sal),ROUND(AVG(sal),2),MAX(sal),MIN(sal) fro

精通SQL结构化查询---学习笔记3

对于汉字的排序,是按首字母的顺序来排序的.使用DISTINCT是要要付出代价的:因为要去掉重复值,必须对结果关系进行排序,相同的元组排列在一起,只有按这种方法对元组进行分组才能去掉重复值,而这一工作甚至比查询本身还费时间. 使用'*'通配符时要慎重,在不需要查询所有列时,尽量采用前面介绍的单列查询或多列查询,以免占用过多的资源. ORDERBY子句一定要放在所有子句的最后,默认是ASC(递增排序):ORDER BY后面可 以采用1.2.3--进行排序,1.2.3--代表了SELECT后面列的次序