组函数:sum()、avg()、count()、max()、min()
1.1求和sum() 用来计算存储在一组记录的某个数字字段的总数量
select sum(salary*12) as sa_su
from employees
where department='市场部';
1.2平均值avg() 计算指定列中的数值的平均值
select avg(salary*12) as sa_av
from employees
where department='市场部';
--注意:sum()、avg();必须是数值型参数
1.3max()、min() 最大值最小值 || 可以是任意数值类型
select max(salary),min(salary),max(hire_date),min(hire_date)
from employees;
1.4计数count() 返回指定字段中包含的一个值的列数
--count()计数
select count(*) from employees;
--
select count(commission_pct) from employees;
--查询job总数
select count(job) from employees;
--类型总数
select count(distinct job) from employees;
1.5nvl()函数的使用
nvl()函数使得分组函数无法获得空值
eg: nvl(表达式1,表达式2) 当表达式1为空值时,返回数值为表达式2的数值,比如nvl(job,0)当job为空时,得到的数值是0,而不是空值,有效地避免了求平均数时的一些错误。
2、group by 子句
--eg:求各个部门的平均工资 (包含单个列)
select avg(salary)
from employees
group by department; //按照部门分组
--求各个部门各个岗位的平均工资 (包含多个列)
select department,job,avg(salary)
from employees
where department is not null
group by department,job;
注意:1、where 语句必须在from语句之后
2、包含在group by语句中的列不必出现在select语句中。
3、在select语句中的所有列必须出现在group by 语句中(除了分组函数包含的列之外)
3、having子句 用来限制一个查询返回的组
where语句有过滤的作用,但是where语句中不能出现分组函数,所以就用having语句来代替。
--员工表中各部门的平均工资>15000的
select department,avg(salary)
from employees
group by department
having avg(salary)>15000;
--查询各部门最高工资>40000的部门
select department,max(salary)
from employees
group by department
having max(salary)>40000;
4、order by语句
默认情况下是升序,asc是降序,其中支持别名
select department,avg(salary) avgs
from employees
group by department
order by avgs asc;
--次排序
...
order by 列1 asc,列2 desc;