PL/SQL循序渐进全面学习教程--课程四 组函数

课程四 组函数
  
  本课重点:
  1、了解可用的组函数
  2、说明每个组函数的使用方法
  3、使用GROUP BY
  4、通过HAVING来限制返回组[@more@]

课程四 组函数
  
  本课重点:
  1、了解可用的组函数
  2、说明每个组函数的使用方法
  3、使用GROUP BY
  4、通过HAVING来限制返回组
  注意:以下实例中标点均为英文半角
  一、概念:
  组函数是指按每组返回结果的函数。
  组函数可以出现在SELECT和HAVING 字段中。
  GROUP BY把SELECT 的结果集分成几个小组。
  HAVING 来限制返回组,对RESULT SET而言。
  二、组函数:(#号的函数不做重点)
  1、AVG
  2、COUNT
  3、MAX
  4、MIN
  5、STDDEV #
  6、SUM
  7、VARIANCE #
  语法:
  SELECT column, group_function
  FROM table
  [WHERE condition]
  [GROUP BY group_by_expression]
  [HAVING group_condition]
  [ORDER BY column];
  实例1:一个混合实例,说明所有问题:
  SQL> SELECT AVG(salary), MAX(salary), MIN(salary),
  2 SUM(salary)
  3 FROM s_emp
  4 WHERE UPPER(title) LIKE ’SALES%’;
  AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)
  ----------- ----------- ----------- -----------
  1476    1525     1400    7380
  说明:很多函数,我们在讲函数的已经向大家介绍过,但在此为何叫分组函数呢,主要是因为它们可以与GROUP

BY来形成对不同组的计算,相当于在很多值中进行挑选。
  * MIN MAX函数可以接任何数据类型。
  如果是MIN(last_name), MAX(last_name),返回的是什么呢?
  千万记住,不是指LAST_NAME的长度,而是指在FIRST字母的前后顺序,第一个相同,然后比较第二个,如:xdopt

 > cssingkdkdk >  adopt > acccc
  实例2:
  SQL> SELECT COUNT(commission_pct)
  2 FROM s_emp
  3 WHERE dept_id = 31;
  返回所有非空行个数
  三、GROUP BY的应用:
  先看一个简单实例:
  SQL> SELECT credit_rating, COUNT(*) ”# Cust”
  2 FROM s_customer
  3 GROUP BY credit_rating;
  注意这里别名的应用,复习一下从前的课程,加了引号后,就可以用特殊字符,但也仅有三个:#$_,什么对象的

名字都如此。当然空格也是可以的。
  复杂实例:
  SQL> SELECT title, SUM(salary) PAYROLL
  2 FROM s_emp
  3 WHERE title NOT LIKE ’VP%’
  4 GROUP BY title
  5 ORDER BY SUM(salary);
  这里要注意一下几个CLAUSE的先后次序。
  WHERE在这里主要是做参与分组的记录的限制。
  **另外,如果要选取出来一个不加组函数的列,如上面的TITLE,就要把这个列GROUP BY !否则要出错的!信息为

:ERROR at line 1:
  ORA-00937: not a single-group group function
  理论很简单,如果不GROUP BY TITLE,显示哪一个呢?这个在试题中经常出现。
  结论:不加分组函数修饰的列必定要出现在GROUP BY 里。
  错误实例:
  SQL> SELECT dept_id, AVG(salary)
  2 FROM s_emp
  3 WHERE AVG(salary) > 2000
  4 GROUP BY dept_id;
  
  WHERE AVG(salary) > 2000
  *
  ERROR at line 3:
  ORA-00934: group function is not allowed here
  应在GROUP BY 后面加上HAVING AVG(salary) > 2000;
  因为是用来限制组的返回。
  多级分组实例:
  SQL> SELECT dept_id, title, COUNT(*)
  2 FROM s_emp
  3 GROUP BY dept_id, title;
  就是先按照DEPT_ID分组,当DEPT_ID相同的时候,再按TITLE分组,而COUNT(*)以合成的组计数。
  顺序对结果有决定性的影响。
  
  总结:本课我们主要学习了分组函数的使用及如何进行分组查询,我们可以想像一下,SQL SERVER中有COMPUTE

BY,来进行分组总数的计算,但在ORACLE中是没有的。大家可以建立一个有多个列,多个重复值的表,然后进行各种

分组的演示,用得多了,自然明了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/34329/viewspace-916779/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/34329/viewspace-916779/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值