oracle-分组统计查询和子查询

范例:统计所有雇员的人数,支付的总工资,平均工资,最高工资,最低工资

select count(empno),sum(sal),avg(sal),max(sal),min(sal) from emp;

范例:统计带工薪的总工资和平均工资

select sum(sal+nvl(comm,0)*12) ,avg(sal+nvl(comm,0)*12) from emp;

面试题:请解释count(*) count(字段)count(distinct 字段)的区别?

  1. count(*):明确返回表中数据的条数
  2. count(字段):不统计为null的数据条数,如果不为null,那么就等于count(*)
  3. count(distinct 字段):统计消除重复数据后的数据条数

在实现具体操作之前必须要先解决一个问题,什么情况下可以分组?

         ·例如:全班,男生一组,女生一组,互相拔河

         ·例如:全部,戴眼镜一组,不戴眼镜一组,互相比裸眼视力

         ·例如:25岁之前一组,25岁之后一组

         实际上所谓的分组,指的是某些群体具备共同的特征。现在回到emp表中,可以发现如果存在有重复的数据,那么就证明这两个字段上都可以进行分组。

         但是一定要记住,实际上一条记录也可以进行分组。只不过这类的做法是没有意义的。可以采用如下语法完成分组。

Select [distinct] * |列名称 [别名],列名称 [别名],…|统计函数

From 数据表 [别名],数据表 [别名],…

[where 条件(s)]

[group by 分组字段,分组字段,…]

[order by 字段 [ASC|DESC]];

范例:按照职位进行分组,统计出每个职位的平均工资、最高工资和最低工资、人数。

select job ,avg(sal),max(sal),min(sal),count(empno) from emp group by job;

1group by 和第一个字段相同;

2、后边的都是统计函数否则会出错;

范例:按照部门编号进行分组,统计出每个部门的人数,平均工资,平均服务年限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值