create_aggregate.l
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. ." This is -*-nroff-*-
  2. ." XXX standard disclaimer belongs here....
  3. ." $Header: /usr/local/cvsroot/pgsql/src/man/Attic/create_aggregate.l,v 1.6 1998/06/23 17:52:31 momjian Exp $
  4. .TH "CREATE AGGREGATE" SQL 11/05/95 PostgreSQL PostgreSQL
  5. .SH NAME
  6. create aggregate - define a new aggregate
  7. .SH SYNOPSIS
  8. .nf
  9. fBcreate aggregatefR agg-name [fBasfR]
  10. fB(fP[fBsfunc1fR fB=fR state-transition-function-1
  11.   ,fP fBbasetypefR fB=fR data-type
  12.   ,fP fBstype1fR fB=fR sfunc1-return-type]
  13.  [fB,fP fBsfunc2fR fB=fR state-transition-function-2
  14.   ,fP fBstype2fR fB=fR sfunc2-return-type]
  15.  [fB,fP fBfinalfuncfR fB=fR final-function]
  16.  [fB,fP fBinitcond1fR fB=fR initial-condition-1]
  17.  [fB,fP fBinitcond2fR fB=fR initial-condition-2]fB)fR
  18. .fi
  19. .SH DESCRIPTION
  20. An aggregate function can use up to three functions, two
  21. .IR "state transition"
  22. functions, X1 and X2:
  23. .nf
  24. X1( internal-state1, next-data_item ) ---> next-internal-state1
  25. X2( internal-state2 ) ---> next-internal-state2
  26. .fi
  27. and a
  28. .BR "final calculation"
  29. function, F:
  30. .nf
  31. F(internal-state1, internal-state2) ---> aggregate-value
  32. .fi
  33. These functions are required to have the following properties:
  34. .IP
  35. The arguments to state-transition-function-1 must be
  36. .BR ( stype1 , basetype ) ,
  37. and its return value must be stype1.
  38. .IP
  39. The argument and return value of state-transition-function-2 must be
  40. .BR stype2 .
  41. .IP
  42. The arguments to the final-calculation-function must be
  43. .BR ( stype1 , stype2 ) ,
  44. and its return value must be a POSTGRES base type (not
  45. necessarily the same as basetype.
  46. .IP
  47. The final-calculation-function should be specified if and only if both
  48. state-transition functions are specified.
  49. .PP
  50. Note that it is possible to specify aggregate functions that have
  51. varying combinations of state and final functions.  For example, the
  52. *(lqcount*(rq aggregate requires
  53. .BR sfunc2
  54. (an incrementing function) but not
  55. .BR sfunc1 " or " finalfunc ,
  56. whereas the *(lqsum*(rq aggregate requires
  57. .BR sfunc1
  58. (an addition function) but not
  59. .BR sfunc2 " or " finalfunc
  60. and the *(lqaverage*(rq aggregate requires both of the above state
  61. functions as well as a
  62. .BR finalfunc
  63. (a division function) to produce its answer.  In any case, at least
  64. one state function must be defined, and any
  65. .BR sfunc2
  66. must have a corresponding 
  67. .BR initcond2 .
  68. .PP
  69. Aggregates also require two initial conditions, one for each
  70. transition function.  These are specified and stored in the database
  71. as fields of type
  72. .IR text .
  73. .SH EXAMPLE
  74. This
  75. .IR avg
  76. aggregate consists of two state transition functions, a addition
  77. function and a incrementing function.  These modify the internal state
  78. of the aggregate through a running sum and and the number of values
  79. seen so far.  It accepts a new employee salary, increments the count,
  80. and adds the new salary to produce the next state.  The state
  81. transition functions must be passed correct initialization values.
  82. The final calculation then divides the sum by the count to produce the
  83. final answer.
  84. .nf
  85. --
  86. --Create an aggregate for int4 average
  87. --
  88. create aggregate avg (sfunc1 = int4add, basetype = int4,
  89.      stype1 = int4, sfunc2 = int4inc, stype2 = int4,
  90.      finalfunc = int4div, initcond1 = "0", initcond2 = "0")
  91. .fi
  92. .SH "SEE ALSO"
  93. create_function(l),
  94. drop_aggregate(l).