开发工具与关键技术:Oracle、
作者:邓李庆
撰写时间:2019年04月01日
下面给大家讲一个分组函数。分组函数作用于一组数据,并对一组数据返回一个值。使用GROUP BY字句对数据分组。组函数类型AVG:是求数据的平均值。
COUNT:是计数函数。返回表中的记录总数,任何数据类型都可以计数。MIN:最小值,查询数据中的最小的那个值显示出来。MAX:最大值,查询数据中的最大的最大的那个值的显示出来。SUM:是合计,可以对数值类型的数据进行计算数据合计。见输出图1:
图1
在组函数中使用NVL函数会无法省略空值。在count中使用DISTINCT关键字返回expr非空且不重复记录总数。分组数据: 可以使用GROUP BY 将表中的数据分成若干组。Where一定放在form后面:
select AVG(commission_pct), commission_pct
from employees
GROUP BY commission_pct
过滤分组使用having过滤,行已经被分组使用组函数。满足having子句中条件分组将显示。
select AVG(commission_pct), commission_pct
from employees
GROUP BY commission_pct
HAVING max(commission_pct) > 1
嵌套组函数显示部门的平均工资的最大值把函数包含起来,从里面执行到外面。
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
查询出谁的工资高,使用子查询在主查询之前一次执行完成主查询出结果。
select *
from score
where cno = ‘3-105’ and degree > any(select degree from score where cno = ‘3-245’)
单行子查询使用单行比较操作符: = 、 > 、 >= 、 < 、 <= 、 <> 、
执行子查询:在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,
–税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%:
select salary,
case
when salary < 1000 then salary
when salary >= 1000 AND salary < 2000 then 1.10salary
when salary >= 2000 AND salary < 3000 then 1.15salary
when salary >= 3000 then 1.20*salary
else salary END
from employees
非法使用子查询的例子:
SELECT employee_id,last_name
FROM employees
WHERE salary =(SELECT MIN(salary) FROM employees GROUP BY department_id);
查询出来的子查询中的空值问题:
SELECT last_name, job_id
FROM employees
WHERE job_id =(SELECT job_id FROM employees WHERE last_name = ‘Haas’)
多行子查询返回多行。多行使用的操作符:
IN :含义:等于列表中的任意一个。
ANY: 含义:和子查询返回的某一个值比较
ALL: 含义:和子查询返回的所有值比较
在多行子查询中使用ANY操作符。返回其他工资:
SELECT salary
FROM employees
WHERE salary < ANY (SELECT salary FROM employees WHERE salary = ‘9000’)
子查询中的空值问题:
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr)