首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责
什么是组分函数
组分函数作用于一组数据,并对一组数据回返一个值。
组函数型类
AVG
COUNT
MAX
MIN
STDDEV(准标方差)
SUM
组函数法语
SELECT [column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
AVG(平均值)和 SUM (计合)函数
可以对数值型数据应用AVG 和 SUM 函数。
SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';
MIN(最小值) 和 MAX(最大值)函数
可以对恣意数据型类的数据应用 MIN 和 MAX 函数。
SELECT MIN(hire_date), MAX(hire_date)
FROM employees;
COUNT(计数)函数
COUNT(*) 回返表中记载总数。
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
COUNT(计数)函数
COUNT(expr) 回返 expr不为空的记载总数。
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 80;
DISTINCT(distinct) 关键字
COUNT(DISTINCT expr) 回返 expr非空且不重复的记载总数
SELECT COUNT(DISTINCT department_id)
FROM employees;
组函数与空值
组函数疏忽空值。
SELECT AVG(commission_pct)
FROM employees;
在组函数中应用NVL函数
NVL函数使组分函数没法疏忽空值。
SELECT AVG(NVL(commission_pct, 0))
FROM employees;
组分数据: GROUP BY 子句法语
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
可以应用GROUP BY 子句将表中的数据分红干若组
GROUP BY 子句
在SELECT 表列中所有未含包在组函数中的列都应该含包
在 GROUP BY 子句中。
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
含包在 GROUP BY 子句中的列不必含包在SELECT 表列中
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
在GROUP BY 子句中含包多个列
SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;
法非应用组函数
所用含包于SELECT 表列中,而未含包于组函数中的列都
必须含包于 GROUP BY 子句中。
SELECT department_id, COUNT(last_name)
FROM employees;
SELECT department_id, COUNT(last_name)
*
ERROR at line 1:
ORA-00937: not a single-group group function
GROUP BY 子句中少缺列
不能在 WHERE 子句中应用组函数(注意)。
可以在 HAVING 子句中应用组函数。
SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;
WHERE AVG(salary) > 8000
*
ERROR at line 3:
ORA-00934: group function is not allowed here
WHERE 子句中不能应用组函数
过滤组分
过滤组分: HAVING 子句
应用 HAVING 过滤组分:
1. 行经已被组分。
2. 应用了组函数。
3. 满意HAVING 子句中条件的组分将被示显。
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
HAVING 子句
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
嵌套组函数
示显平均工资的最大值
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
总结
通过本章习学,您经已学会:
应用组函数。
在查询中应用 GROUP BY 子句。
在查询中应用 HAVING 子句。
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
文章结束给大家分享下程序员的一些笑话语录:
警告
有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
小伙子说,“没事儿,我是一个程序员”。
那妇女说,“这又怎样?”
程序员说,“我们从来不关心 Warning,只关心 Error”