分组函数(多行函数):
--针对表中的多行数据进行运算,返回一个结果

1.多行函数

--sum() 求和
SELECT SUM(sal) FROM emp;

--avg() 求平均值
SELECT AVG(sal) FROM emp;

--sum 和 avg 只能对数字类型进行运算

--count() 计数,非空值的行数
SELECT COUNT(empno),COUNT(*),COUNT(comm) FROM emp;

--max() 求最大值,min() 最小值
SELECT MAX(sal),MIN(sal) FROM emp;

--max 和 min 可以针对所有数据类型进行运算
SELECT MAX(hiredate),MIN(hiredate) FROM emp;

SELECT MAX(ename),MIN(ename) FROM emp;

--分组函数会忽略空值
SELECT AVG(comm),COUNT(comm) FROM emp;

SELECT SUM(comm)/COUNT(empno),SUM(comm)/COUNT(comm) FROM emp;

--使用nvl函数处理空值
SELECT AVG(NVL(comm,0)),COUNT(NVL(comm,0)) FROM emp;

--可以使用where字句限定分组函数的计算范围
--计算30号部门的平均工资
SELECT AVG(sal) FROM emp
WHERE deptno = 30;

2.group by子句
--计算每个部门的人数
SELECT deptno,COUNT(empno) FROM emp
GROUP BY deptno;

--如果select后面既有普通列又有分组函数,必须使用group by子句
--并且select后面的普通列必须出现在group by后面

--计算每个职位的工资之和
SELECT job,SUM(sal) FROM emp
GROUP BY job;

--多列分组
--查询每个部门各个职位的最低工资
SELECT deptno,job,MIN(sal),COUNT(*) FROM emp
GROUP BY deptno,job
ORDER BY deptno;

--查询每个部门工资超过2000的员工人数
SELECT deptno,COUNT(*) FROM emp
WHERE sal > 2000
GROUP BY deptno;

3.having子句
--having子句出现在group by后面
--使用group by不一定使用having,使用having则必须使用group by
--查询部门平均工资高于2000的部门
/*
where 子句中不能出现分组函数
SELECT deptno FROM emp
WHERE AVG(sal) > 2000
GROUP BY deptno;
*/
SELECT deptno,AVG(sal) FROM emp
GROUP BY deptno
HAVING AVG(sal) > 2000;

4.分组函数的嵌套
SELECT MAX(AVG(sal)) FROM emp
GROUP BY deptno;
--分组函数的嵌套不能和普通列一起查询

SELECT AVG(MAX(sal)) FROM emp
GROUP BY deptno;

【练习】
1.查询每个职位的职位名称及平均工资,按平均工资升序排列.
SELECT job,AVG(sal) FROM emp
GROUP BY job
ORDER BY AVG(sal);

2.查询每个部门的各个职位的平均工资,并按部门编号升序、平均工资降序排序。
SELECT deptno,job,AVG(sal) FROM emp
GROUP BY deptno,job
ORDER BY deptno,AVG(sal) DESC;

3.查询每个工资等级所对应的人数
SELECT s.grade,COUNT(e.ename)
FROM salgrade s,emp e
WHERE e.sal BETWEEN s.losal AND s.hisal
GROUP BY s.grade
ORDER BY s.grade;

4.查询EMP表,要求写一条sql语句统计出如下图所示结果

10号部门人数 20号部门人数 30号部门人数
------------ ------------ ------------
3 5 6
SELECT deptno,COUNT(*) FROM emp
GROUP BY deptno;

SELECT SUM(DECODE(deptno,10,1,0)) dept10,
SUM(DECODE(deptno,20,1,0)) dept20,
SUM(DECODE(deptno,30,1,0)) dept30
FROM emp;

Oracle-DQL 5- 分组函数(多行函数)的更多相关文章

  1. Oracle学习第三篇—多行函数

    0 order by asc/desc 默认升序 order by 列的名字|表达式|别名|序号 把空放在后边:order by desc nulls last 1分组函数--会自动滤空值 count ...

  2. Oracle数据库sql 列转字符串行函数WMSYS.WM_CONCAT()

    例.select TO_CHAR(WMSYS.WM_CONCAT(ID)) from patrol_data_content  where patrol_unit_id = '1628D189543B ...

  3. Oracle_多行函数

      Oracle_多行函数   多行函数min(),max(),count(),sum(),avg() --1.1统计公司的最高工资,最低工资和总人数 --对于null值直接略过,不做运算 --max ...

  4. oracle--单行函数和多行函数

    单行函数 1.字符函数 函  数 功  能 示  例 结 果 INITCAP (char) 首字母大写 initcap ('hello') Hello LOWER (char) 转换为小写 lower ...

  5. DQL---条件查询、单行函数、多行函数、分组函数、数据类型

    一.DQL 1.基本规则: (1)对于日期型数据,做 *,/ 运算不合法,可以进行 +, - 运算.比如给日期加一天或减一个月,结果仍为一个日期.两个日期间只能为减法,返回两个日期相差的天数,两个日期 ...

  6. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

  7. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

    花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...

  8. Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项

    目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...

  9. Oracle Day3 多行函数、多表查询

    1.多行函数 Sum avg max min count 组函数具有滤空的作用(添加nvl屏蔽该功能) 分组group by 多行分组 分组过滤 where 和分组过滤的区别(having) 分组的增 ...

  10. [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行

    原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...

随机推荐

  1. Codevs 1331 西行寺幽幽子(高精度)

    1331 西行寺幽幽子 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵.不过幽幽子可不是只 ...

  2. Mybatis源码学习之日志(五)

    简述 在Java开发中常用的日志框架有Log4j.Log4j2.Apache Commons Log.java.util.logging.slf4j等,这些工具对外的接口并不相同.为了统一这些工具的接 ...

  3. Github提交PR(pull request)过程

    PR 想一想, 也可以想执行6.7.8, 再执行4.5. 避免原仓库和fork仓库的冲突 fork到自己的仓库 git clone到本地 git remote add upstream [原项目地址] ...

  4. POJ 3177 (Redundant Paths) —— (有重边,边双联通,无向图缩点)

    做到这里以后,总算是觉得tarjan算法已经有点入门了. 这题的题意是,给出若干个点和若干条边连接他们,在这个无向图中,问至少增加多少条边可以使得这个图变成边双联通图(即任意两点间都有至少两条没有重复 ...

  5. java 网络文件下载(并命中文名)

    public void download(HttpServletRequest request, HttpServletResponse response){ //获取服务器文件 String fil ...

  6. NFFM的原理与代码

    本篇深入分析郭大nffm的代码 TensorFlow计算图 计算图的构建 ones = tf.ones_like(emb_inp_v2) mask_a = tf.matrix_band_part(on ...

  7. PHP Storm Built In Server Doesn't Recognize mod_rewrite

    http://stackoverflow.com/questions/22139032/php-storm-built-in-server-doesnt-recognize-mod-rewrite 版 ...

  8. MAC-下安装php-redis扩展

    MAC下安装php-redis扩展   下载php-redis,地址:https://nodeload.github.com/nicolasff/phpredis/zip/master 下载完成得到p ...

  9. Mac下持续集成-自动发送邮件

    找到下面这项填写邮件地址 注意下面绿色标记的邮箱要和上面的一致,否则会报错 如果两个绿色标记的邮箱不一致会报这样的错: ---------------------------------------- ...

  10. ubuntu更换源的方法

    1.查看ubuntu版本的方法: 使用命令 sudo lsb_release -a 输出如下: root@localhost:/etc/apt# sudo lsb_release -aNo LSB m ...