1、统计各部门的平均工资,平均资金(要求同时显示出部门名称,部门编号,部门总人数)

SQL> SELECT DNAME 部门名称,D.DEPTNO 部门编号,COUNT(ENAME) 部门总人数,ROUND(AVG(NVL(SAL,0)),2) 部门平均工资,ROUND(AVG(NVL(COMM,0)),1) 部门平均资金 
FROM EMP E RIGHT JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
GROUP BY DNAME,D.DEPTNO
ORDER BY D.DEPTNO;
部门名称 部门编号 部门总人数 部门平均工资 部门平均资金
-------------- ---------- ---------- ------------ ------------
ACCOUNTING 10 3 2916.67 0
RESEARCH 20 5 2175 0
SALES 30 6 1566.67 366.7
OPERATIONS 40 0 0 0

2、同上,只显示部门编号为10,20,30的信息

SQL> SELECT DNAME 部门名称,D.DEPTNO 部门编号,COUNT(ENAME) 部门总人数,ROUND(AVG(NVL(SAL,0)),2) 部门平均工资,ROUND(AVG(NVL(COMM,0)),1) 部门平均资金 
FROM EMP E RIGHT JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
GROUP BY DNAME,D.DEPTNO
HAVING D.DEPTNO IN(10,20,30)
ORDER BY D.DEPTNO;
部门名称 部门编号 部门总人数 部门平均工资 部门平均资金
-------------- ---------- ---------- ------------ ------------
ACCOUNTING 10 3 2916.67 0
RESEARCH 20 5 2175 0
SALES 30 6 1566.67 366.7 SQL>

解析:使用NVL函数处理空值,使空值为0,因为AVG函数在计算平均值时会忽略空值。使用ROUND函数来进行四舍五入。使用HAVING子句来过滤分组结果,所以having不能放在order by条件之后。同理可使用SUM、MAX、MIN函数来进行统计。

SQL> SELECT DNAME 部门名称,D.DEPTNO 部门编号,COUNT(ENAME) 部门总人数,ROUND(AVG(NVL(SAL,0)),2) 部门平均工资,ROUND(AVG(NVL(COMM,0)),1) 
部门平均资金,NVL(MAX(SAL),0) 最高工资,NVL(MIN(SAL),0) 最低工资,NVL(SUM(SAL),0) 部门工资总支出,NVL(MAX(COMM),0) 最高资金, NVL(MIN(COMM),0)
最低奖金,NVL(SUM(COMM),0) 部门奖金总额
FROM EMP E RIGHT JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
GROUP BY DNAME,D.DEPTNO
ORDER BY D.DEPTNO;
部门名称 部门编号 部门总人数 部门平均工资 部门平均资金 最高工资 最低工资 部门工资总支出 最高资金 最低奖金 部门奖金总额
--------- -------- ---------- --------- ------- ------ ---------- ------- ---------- -------- ----------
ACCOUNTING 10 3 2916.67 0 5000 1300 8750 0 0 0
RESEARCH 20 5 2175 0 3000 800 10875 0 0 0
SALES 30 6 1566.67 366.7 2850 950 9400 1400 0 2200
OPERATIONS 40 0 0 0 0 0 0 0 0 0 SQL>

曾经很长时间不会写的两个SQL语句(group by,having)的更多相关文章

  1. 分享最近写的 两条sql语句

    1. 搭建基本环境 插入测试数据 insert into jgdm (jgdm,jgmc)  values('12300000000','河南省');insert into jgdm (jgdm,jg ...

  2. 【生产问题】记还原一个很小的BAK文件,但却花了很长时间,分析过程

    [生产问题]还原一个很小的BAK文件,但却花了很长时间? 关键词:备份时事务日志太大会发生什么?还原时,事务日志太大会怎么办? 1.前提: [1.1]原库数据已经丢失,只有这个bak了 [1.2]ba ...

  3. Springmvc+Hibernate在Eclipse启动Tomcat需要很长时间的解决方法

    最近在学习SpringMvc开发,有一个提问困扰了很久,就是在Eclipse启动Tomcat需要很长时间,大概要1分多钟. 启动日志: 九月 08, 2016 8:59:01 下午 org.apach ...

  4. 为什么drop table的时候要在checking permissions花很长时间?

    昨天,我drop一个表的时候在checking permissions花了20s+,这个时间花在哪里了呢?经常查找发现我的配置文件innodb_file_per_table=1的,innodb需要遍历 ...

  5. Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案

    后来在google查到相关资料,原因是:当Fragment长久不使用,系统进行回收,FragmentActivity调用onSaveInstanceState保存Fragment对象.很长时间后,再次 ...

  6. 理解SQL原理,写出高效的SQL语句

    我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还 ...

  7. SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比

    原文:SQL点滴10-使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比 今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章 ...

  8. 题目:写出一条SQL语句,查询工资高于10000,且与他所在部门的经理年龄相同的职工姓名。

    create table Emp( eid char(20) primary key, ename char(20), age integer check (age > 0), did char ...

  9. 使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比

    今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章,自己添加了一些内容,做了简单的总结,这个语句还是第一次见到,学习了.我从简单到复杂地写, ...

随机推荐

  1. Bootstrap <基础十九>分页

    Bootstrap 支持的分页特性.分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页. 分页(Pagination) 下表列出了 Bootstrap 提 ...

  2. 测不准的程序员(Heisenberg Developers)

    摘译自http://mikehadlow.blogspot.co.uk/2014/06/heisenberg-developers.html   ——“你无法在不改变他们状态的情况下观察一个开发者” ...

  3. linux下生成core dump文件方法及设置

    linux下生成core dump文件方法及设置    from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...

  4. org.json和json-lib比较

    经常会用到JSON格式才处理,尤其是在Http请求的时候,网上可以找到很多json处理的相关工具,如org.json和json-lib,下面两段源代码是分别使用这两个工具解析和构造JSON的演示程序. ...

  5. 查看tablespace实际使用量和剩余空间

    到某表空间所有段的加和值,即按表空间分组统计dba_data_files.bytes-dba_free_space.bytes=dba_segments.bytesdba_segments中可查询已分 ...

  6. Extjs中grid表格中去掉红三角

    在编辑Extjs的gridpanel的时候,数据有错误或是修改在每个单元格上都会出现红色的小三角,在每个列上面可以配置allowBlank: false来标识这个不可以为空 有的时候在保存数据时如果不 ...

  7. Mosquitto安装_Ubuntu/Debian上安装消息队列Mosquitto

    Mosquitto安装_Ubuntu/Debian上安装消息队列Mosquitto MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制.M ...

  8. java中File类的相关学习

    File类 1.关于系统路径分割符. 在Windows中,使用反斜杠“\”作为路径分割符,比如“c:\test”,但是java中反斜杠表示转义,所以需要用“C:\\test”在程序中来表示路径.还可以 ...

  9. AndroidStudio中导入SlidingMenu报错解决方案

    ----------------------------------------------------------------------------------------------[版权申明: ...

  10. poj 1321 棋盘问题 (DFS深度优先搜索)

    Problem Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋 ...