曾经很长时间不会写的两个SQL语句(group by,having)
2014-12-09 22:58
525 查看
1、统计各部门的平均工资,平均资金(要求同时显示出部门名称,部门编号,部门总人数)
2、同上,只显示部门编号为10,20,30的信息
解析:使用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) 部门平均资金 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语句的使用
- 关于having,group by 的Sql 语句
- SQL语句之order by 、group by、having、where
- sql语句中having count 和group by的使用
- sql语句中GROUP BY 和 HAVING的使用 count()
- Group By 和 Having语句在SQL中的的经典搭配
- SQL语句where,Group By,having order by 的详细使用方法
- 当一个SQL语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序
- 数据库 sql语句中where和having的区别 、having的使用、SQL中Group By的使用
- sql语句中GROUP BY 和 HAVING的使用
- SQL语句where,Group By,having order by 的详细使用方法
- SQL中Group By, Having, Where, Order by几个语句的执行顺序
- Oracle中SQL语句学习五(统计分组语句group by和having)
- sql语句中,group by和having count()的使用
- SQL中GROUP BY语句与HAVING语句的使用
- 基本SQL语句练习(order by,group by,having)
- sql 语句 嵌套查询 (where,group by,having,in,some,all...)
- sql语句中where、group by、having、order by 是否可以使用别名
- SQL 语句GROUP BY 和 HAVING
- sql语句中GROUP BY 和 HAVING的使用 count()