美文网首页
分组函数

分组函数

作者: 孙竞博 | 来源:发表于2017-12-13 09:13 被阅读0次
  • max()、min()、sum()、avg()、count()
  • ()里加入的是列名
  • 分组函数默认不计null值
    null值需要加入nvl函数
select avg(nvl(comm,0))
from emp
  • nvl函数(单行函数)
    nvl(列名,值)如果列名是null,就变为值
    在MYSQL里nvl替代为coalesce

练习1.1 查询部门20的员工,每个月的工资总和及平均工资。

select sum(sal), avg(sal)
from emp 
where deptno=20

1.2 查询工作在CHICAGO的员工人数,最高工资及最低工资。

select count(d.loc), max(e.sal), min(e.sal)
from emp e
join dept d on e.deptno=d.deptno 
where d.loc='CHICAGO'

1.3 查询员工表中一共有几种岗位类型。

select count(distinct nvl(d.dname,0))
from emp e
right outer join dept d on e.deptno=d.deptno 
  • group by:select后只能加group by后面的列名
  • 如果相加其他列,只能加入其它函数中
  • group by出现的列不是必须出现在select中

练习2.1 查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。

select e.deptno, d.dname, count(e.deptno), max(e.sal), min(e.sal), sum(e.sal), avg(e.sal)
from emp e
join dept d on e.deptno=d.deptno
group by e.deptno, d.dname

2.2 查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。

select e.deptno, d.dname, e.job, count(e.deptno), max(e.sal),min(e.sal), sum(e.sal),avg(e.sal)
from emp e 
join dept d on e.deptno=d.deptno 
group by e.deptno, d.dname, e.job 

2.3 查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。

select count(e.mgr), m.empno, m.ename
from emp e
right outer join emp m on e.mgr=m.empno
group by m.empno, m.ename 
  • having后面加条件
  • 跟where相比:可以加函数,where不行
  • 6个子句的顺序
select deptno, count(deptno)
from emp
where deptno>10
group by deptno
having count(deptno) > 2
order by count(deptno)

练习3.1 查询部门人数大于2的部门编号,部门名称,部门人数。

select e.deptno, d.dname, count(e.deptno)
from emp e
join dept d on e.deptno=d.deptno 
group by e.deptno, d.dname
having count(e.deptno) > 2

3.2 查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序。

select e.deptno, d.dname, count(e.deptno), avg(e.sal)
from emp e
join dept d on e.deptno=d.deptno 
group by e.deptno, d.dname 
having avg(e.sal)>2000 and count(e.deptno)>2
order by count(e.deptno) 

课后作业

  1. 查询部门平均工资在2500元以上的部门名称及平均工资。
select d.dname, avg(e.sal)
from emp e
join dept d on e.deptno=d.deptno 
group by d.dname 
having avg(e.sal)>2500
  1. 查询员工岗位中不是以“SA”开头并且平均工资在2500以上的岗位及平均工资,并按平均工资降序排序。
select e.job, avg(sal)
from emp e
group by e.job 
having e.job not like'SA%' and avg(sal)>2500
order by avg(sal) desc
  1. 查询部门人数在2人以上的部门名称、最低工资、最高工资,并对求得的工资进行四舍五入到整数位。
select d.dname, round(min(e.sal)), round(max(e.sal))
from emp e
join dept d on e.deptno=d.deptno 
group by d.dname 
having count(e.deptno)>2 
  1. 查询岗位不为SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和。
select e.job, sum(e.sal) 
from emp e
group by e.job 
having e.job<>'SALESMAN' and sum(e.sal)>=2500
  1. 显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序。
select m.empno, m.ename, min(e.sal)
from emp e
left outer join emp m on e.mgr=m.empno 
group by m.empno, m.ename 
having min(e.sal)>=3000
order by min(e.sal) desc
  1. 写一个查询,显示每个部门最高工资和最低工资的差额。
select e.deptno, max(e.sal)-min(e.sal)
from emp e
group by e.deptno

©code by sunjingbo

相关文章

  • SQL总结-开窗函数

    一 . 开窗函数 分组函数 开窗函数 分组与开窗的区别分组函数每组只返回一行,而开窗函数每组返回多行。如下: 分组...

  • MySQL——分组函数、distinct、分组查询、连接查询、子

    MySQL——分组函数、distinct、分组查询、连接查询、子查询 一、分组函数(聚合函数)1、 会自动忽略空值...

  • 1-(2)、MySql——基础部分

    一、MySQL之函数(单行函数、分组函数) 1、概述 调用语法:select函数名(实参列表);分组函数和单行函数...

  • MySQL查询语法

    1 分组函数和单行函数 分组函数和单行函数的区别:单行函数:将一个数据进行处理,返回一个值分组函数:将虚拟表看做一...

  • Mysql笔记之分组函数和分组查询

    1、分组函数 2、分组查询 3、分组查询案例

  • Python:groupby函数及分组后使用自定义函数计算分组后

    groupby函数分组原理:(1)不论分组键是数组、列表、字典、series、函数,只要待分组变量与分组键值的长度...

  • 分组函数

    在SQL中常使用的组函数有以下几个:1、COUNT(): 求出全部的记录数2、MAX():求出一组中最大的值3、M...

  • 分组函数

  • 分组函数

    max()、min()、sum()、avg()、count() ()里加入的是列名 分组函数默认不计null值nu...

  • 分组函数

    一、分组函数概述 分组函数是对表中一组记录进行操作,每组只返回一个结果,即首先要对表记录进行分组,然后在进行操作汇...

网友评论

      本文标题:分组函数

      本文链接:https://www.haomeiwen.com/subject/xjtaixtx.html