宋体函数Java乔晓松-oracle分组函数

首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责

    

什么是组分函数

    组分函数作用于一组数据,并对一组数据回返一个值。

    

组函数型类

    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;

    DISTINCTdistinct) 关键字

    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”

posted @ 2013-04-29 13:22  坚固66  阅读(250)  评论(0)    收藏  举报