网络编程
位置:首页>> 网络编程>> 数据库>> OraclePL/SQL单行函数和组函数详解(4)

OraclePL/SQL单行函数和组函数详解(4)

 来源:asp之家 发布时间:2010-07-28 13:02:00 

标签:oracle,pl,sql,函数

379
380  EMPTY_BLOB()
381  该函数没有参数,函数返回 一个空的BLOB位置指示符。函数用于初始化一个BLOB变量或BLOB列。
382
383  EMPTY_CLOB()
384  该函数没有参数,函数返回 一个空的CLOB位置指示符。函数用于初始化一个CLOB变量或CLOB列。
385
386  GREATEST()
387  exp_list是一列表达式,返回其中最大的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,那么返回的结果是varchar2数据类型, 同时使用的比较是非填充空格类型的比较。
388
389  LEAST()
390  exp_list是一列表达式,返回其中最小的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,将返回的结果是varchar2数据类型, 同时使用的比较是非填充空格类型的比较。
391
392  UID
393  该函数没有参数,返回唯一标示当前数据库用户的整数。
394
395  USER
396  返回当前用户的用户名
397
398  USERENV()
399  基于opt返回包含当前会话信息。opt的可选值为:
400
401  ISDBA    会话中SYSDBA脚色响应,返回TRUE
402  SESSIONID  返回审计会话标示符
403  ENTRYID   返回可用的审计项标示符
404  INSTANCE  在会话连接后,返回实例标示符。该值只用于运行Parallel 服务器并且有 多个实例的情况下使用。
405  LANGUAGE  返回语言、地域、数据库设置的字符集。
406  LANG    返回语言名称的ISO缩写。
407  TERMINAL  为当前会话使用的终端或计算机返回操作系统的标示符。
408
409  VSIZE()
410  x是一个表达式。返回x内部表示的字节数。
411
412  SQL中的组函数
413
414  组函数也叫集合函数,返回基于多个行的单一结果,行的准确数量无法确定,除非查询被执行并且所有的结果都被包含在内。与单行函数不同的是,在解析时所有的行都是已知的。由于这种差别使组函数与单行函数有在要求和行为上有微小的差异.
415
416  组(多行)函数
417
418  与单行函数相比,oracle提供了丰富的基于组的,多行的函数。这些函数可以在select或select的having子句中使用,当用于select子串时常常都和GROUP BY一起使用。
419
420  AVG([{DISYINCT|ALL}])
421  返回数值的平均值。缺省设置为ALL.
422
423SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.emp
424
425AVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)
426
4271877.94118 1877.94118 1916.071413
428
429
430  COUNT({*|DISTINCT|ALL} )
431  返回查询中行的数目,缺省设置是ALL,*表示返回所有的行。
432
433  MAX([{DISTINCT|ALL}])
434  返回选择列表项目的最大值,如果x是字符串数据类型,他返回一个VARCHAR2数据类型,如果X是一个DATA数据类型,返回一个日期,如果X是numeric数据类型,返回一个数字。注意distinct和all不起作用,应为最大值与这两种设置是相同的。
435
436  MIN([{DISTINCT|ALL}])
437  返回选择列表项目的最小值。
438
439  STDDEV([{DISTINCT|ALL}])
440  返回选者的列表项目的标准差,所谓标准差是方差的平方根。
441
442  SUM([{DISTINCT|ALL}])
443  返回选择列表项目的数值的总和。
444
445  VARIANCE([{DISTINCT|ALL}])
446  返回选择列表项目的统计方差。
447
448  用GROUP BY给数据分组
449
450  正如题目暗示的那样组函数就是操作那些已经分好组的数据,我们告诉数据库用GROUP BY怎样给数据分组或者分类,当我们在SELECT语句的SELECT子句中使用组函数时,我们必须把为分组或非常数列放置在GROUP BY子句中,如果没有用group by进行专门处理,那么缺省的分类是将整个结果设为一类。
451
452select stat,counter(*) zip_count from zip_codes GROUP BY state;
453
454ST ZIP_COUNT
455-- ---------
456AK 360
457AL 1212
458AR 1309
459AZ 768
460CA 3982
461
462  在这个例子中,我们用state字段分类;如果我们要将结果按照zip_codes排序,可以用ORDER BY语句,ORDER BY子句可以使用列或组函数。
463
464select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;
465
466ST COUNT(*)
467-- --------
468NY 4312
469PA 4297
470TX 4123
471CA 3982
472
473  用HAVING子句限制分组数据
474
475  现在你已经知道了在查询的SELECT语句和ORDER BY子句中使用主函数,组函数只能用于两个子串中,组函数不能用于WHERE子串中,例如下面的查询是错误的 :
476
477错误
478SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk
479
480
481  这个语句中数据库不知道SUM()是什么,当我们需要指示数据库对行分组,然后限制分组后的行的输出时,正确的方法是使用HAVING语句:
482
483SELECT sales_clerk,SUN(sale_amount)
484FROM gross_sales
485WHERE sales_dept='OUTSIDE'
486GROUP BY sales_clerk
487HAVING SUM(sale_amount)>10000;
488
489  嵌套函数
490
491  函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODE这样的能被用于逻辑判断语句IF.THENELSE的函数。
492
493  嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中。比如下面的例子:
494
495SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,
496COUNT(DISTINCT job) jobs,
497COUNT(DISTINCT mgr) mgrs
498FROM emp
499GROUP BY deptno;
500
501DEPTNO CNT JOBS MGRS
502------ --- ---- ----
50310 4 4 2
50420 4 3 4
50530 3 3 2

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com