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

数据库系统

开发平台:

Unix_Linux

  1. <refentry id="SQL-CREATEAGGREGATE">
  2.  <refmeta>
  3.   <refentrytitle>
  4.    CREATE AGGREGATE
  5.   </refentrytitle>
  6.   <refmiscinfo>SQL - Language Statements</refmiscinfo>
  7.  </refmeta>
  8.  <refnamediv>
  9.   <refname>
  10.    CREATE AGGREGATE
  11.   </refname>
  12.   <refpurpose>
  13.    Defines a new aggregate function
  14.   </refpurpose>
  15.  </refnamediv>
  16.  <refsynopsisdiv>
  17.   <refsynopsisdivinfo>
  18.    <date>1998-09-09</date>
  19.   </refsynopsisdivinfo>
  20.   <synopsis>
  21. CREATE AGGREGATE <replaceable class="PARAMETER">name</replaceable> [ AS ]
  22.     ( BASETYPE    = <replaceable class="PARAMETER">data_type</replaceable>
  23.     [ , SFUNC1    = <replaceable class="PARAMETER">sfunc1</replaceable>
  24.       , STYPE1    = <replaceable class="PARAMETER">sfunc1_return_type</replaceable> ]
  25.     [ , SFUNC2    = <replaceable class="PARAMETER">sfunc2</replaceable>
  26.       , STYPE2    = <replaceable class="PARAMETER">sfunc2_return_type</replaceable> ]
  27.     [ , FINALFUNC = <replaceable class="PARAMETER">ffunc</replaceable> ]
  28.     [ , INITCOND1 = <replaceable class="PARAMETER">initial_condition1</replaceable> ]
  29.     [ , INITCOND2 = <replaceable class="PARAMETER">initial_condition2</replaceable> ]
  30.     )
  31.   </synopsis>
  32.   <refsect2 id="R2-SQL-CREATEAGGREGATE-1">
  33.    <refsect2info>
  34.     <date>1998-09-09</date>
  35.    </refsect2info>
  36.    <title>
  37.     Inputs
  38.    </title>
  39.    <para>
  40.     <variablelist>
  41.      <varlistentry>
  42.       <term><replaceable class="PARAMETER">name</replaceable></term>
  43.       <listitem>
  44.        <para>
  45. The name of an aggregate function to create.
  46.        </para>
  47.       </listitem>
  48.      </varlistentry>
  49.      <varlistentry>
  50.       <term><replaceable class="PARAMETER">data_type</replaceable></term>
  51.       <listitem>
  52.        <para>
  53. The fundamental data type on which this aggregate function operates.
  54.        </para>
  55.       </listitem>
  56.      </varlistentry>
  57.      <varlistentry>
  58.       <term><replaceable class="PARAMETER">sfunc1</replaceable></term>
  59.       <listitem>
  60.        <para>
  61. The state transition function
  62. to be called for every non-NULL field from the source column.
  63. It takes a variable of
  64. type <replaceable class="PARAMETER">sfunc1_return_type</replaceable> as
  65. the first argument and that field as the
  66. second argument.
  67.        </para>
  68.       </listitem>
  69.      </varlistentry>
  70.      <varlistentry>
  71.       <term><replaceable class="PARAMETER">sfunc1_return_type</replaceable></term>
  72.       <listitem>
  73.        <para>
  74. The return type of the first transition function.
  75.        </para>
  76.       </listitem>
  77.      </varlistentry>
  78.      <varlistentry>
  79.       <term><replaceable class="PARAMETER">sfunc2</replaceable></term>
  80.       <listitem>
  81.        <para>
  82. The state transition function
  83. to be called for every non-NULL field from the source column.
  84. It takes a variable
  85. of type <replaceable class="PARAMETER">sfunc2_return_type</replaceable>
  86. as the only argument and returns a variable of the same type.
  87.        </para>
  88.       </listitem>
  89.      </varlistentry>
  90.      <varlistentry>
  91.       <term><replaceable class="PARAMETER">sfunc2_return_type</replaceable></term>
  92.       <listitem>
  93.        <para>
  94. The return type of the second transition function.
  95.        </para>
  96.       </listitem>
  97.      </varlistentry>
  98.      <varlistentry>
  99.       <term><replaceable class="PARAMETER">ffunc</replaceable></term>
  100.       <listitem>
  101.        <para>
  102. The final function
  103. called after traversing all input fields. This function must
  104. take two arguments of types
  105. <replaceable class="PARAMETER">sfunc1_return_type</replaceable>
  106. and
  107. <replaceable class="PARAMETER">sfunc2_return_type</replaceable>.
  108.        </para>
  109.       </listitem>
  110.      </varlistentry>
  111.      <varlistentry>
  112.       <term><replaceable class="PARAMETER">initial_condition1</replaceable></term>
  113.       <listitem>
  114.        <para>
  115. The initial value for the first transition function argument.
  116.        </para>
  117.       </listitem>
  118.      </varlistentry>
  119.      <varlistentry>
  120.       <term><replaceable class="PARAMETER">initial_condition2</replaceable></term>
  121.       <listitem>
  122.        <para>
  123. The initial value for the second transition function argument.
  124.        </para>
  125.       </listitem>
  126.      </varlistentry>
  127.     </variablelist>
  128.    </para>
  129.   </refsect2>
  130.   <refsect2 id="R2-SQL-CREATEAGGREGATE-2">
  131.    <refsect2info>
  132.     <date>1998-09-09</date>
  133.    </refsect2info>
  134.    <title>
  135.     Outputs
  136.    </title>
  137.    <para>
  138.     <variablelist>
  139.      <varlistentry>
  140.       <term><computeroutput>
  141. CREATE
  142.        </computeroutput></term>
  143.       <listitem>
  144.        <para>
  145. Message returned if the command completes successfully.
  146.        </para>
  147.       </listitem>
  148.      </varlistentry>
  149.     </variablelist>
  150.    </para>
  151.   </refsect2>
  152.  </refsynopsisdiv>
  153.  <refsect1 id="R1-SQL-CREATEAGGREGATE-1">
  154.   <refsect1info>
  155.    <date>1998-09-09</date>
  156.   </refsect1info>
  157.   <title>
  158.    Description
  159.   </title>
  160.   <para>
  161.    <command>CREATE AGGREGATE</command> 
  162.    allows a user or programmer to extend <productname>Postgres</productname>
  163.    functionality by defining new aggregate functions. Some aggregate functions
  164.    for base types such as <function>min(int4)</function>
  165.    and <function>avg(float8)</function> are already provided in the base
  166.    distribution. If one defines new types or needs an aggregate function not
  167.    already provided then <command>CREATE AGGREGATE</command>
  168.    can be used to provide the desired features.
  169.   </para>
  170.   <para>
  171.    An  aggregate  function can require up to three functions, two
  172.    state transition functions, 
  173.    <replaceable class="PARAMETER">sfunc1</replaceable>
  174.    and <replaceable class="PARAMETER">sfunc2</replaceable>:
  175.    <programlisting>
  176. <replaceable class="PARAMETER">sfunc1</replaceable>( internal-state1, next-data_item ) ---> next-internal-state1 <replaceable class="PARAMETER">sfunc2</replaceable>( internal-state2 ) ---> next-internal-state2
  177.    </programlisting>
  178.    and a final calculation function,
  179.    <replaceable class="PARAMETER">ffunc</replaceable>:
  180.    <programlisting>
  181. <replaceable class="PARAMETER">ffunc</replaceable>(internal-state1, internal-state2) ---> aggregate-value
  182.    </programlisting>
  183.   </para>
  184.   <para>
  185.    <productname>Postgres</productname> creates up to two temporary variables
  186.    (referred to here as <replaceable class="PARAMETER">temp1</replaceable>
  187.    and <replaceable class="PARAMETER">temp2</replaceable>)
  188.    to hold intermediate results used as arguments to the transition functions.
  189.   </para>
  190.   <para>
  191.    These transition functions are required to have the following properties:
  192.    <itemizedlist>
  193.     <listitem>
  194.      <para>
  195.       The  arguments  to 
  196.       <replaceable class="PARAMETER">sfunc1</replaceable>
  197.       must be
  198.       <replaceable class="PARAMETER">temp1</replaceable>
  199.       of type
  200.       <replaceable class="PARAMETER">sfunc1_return_type</replaceable>
  201.       and
  202.       <replaceable class="PARAMETER">column_value</replaceable>
  203.       of type <replaceable class="PARAMETER">data_type</replaceable>.
  204.       The return value must  be of type
  205.       <replaceable class="PARAMETER">sfunc1_return_type</replaceable>
  206.       and will be used as the first argument in the next call to 
  207.       <replaceable class="PARAMETER">sfunc1</replaceable>.
  208.      </para>
  209.     </listitem>
  210.     
  211.     <listitem>
  212.      <para>
  213.       The  argument and return value of 
  214.       <replaceable class="PARAMETER">sfunc2</replaceable>
  215.       must be
  216.       <replaceable class="PARAMETER">temp2</replaceable>
  217.       of type
  218.       <replaceable class="PARAMETER">sfunc2_return_type</replaceable>.
  219.      </para>
  220.     </listitem>
  221.     <listitem>     
  222.      <para>
  223.       The  arguments  to  the  final-calculation-function
  224.       must  be
  225.       <replaceable class="PARAMETER">temp1</replaceable>
  226.       and
  227.       <replaceable class="PARAMETER">temp2</replaceable>
  228.       and its return value must
  229.       be a <productname>Postgres</productname>
  230.       base type (not necessarily
  231.       <replaceable class="PARAMETER">data_type</replaceable> 
  232.       which had been specified for BASETYPE).
  233.      </para>
  234.     </listitem>
  235.     <listitem>
  236.      <para>
  237.       FINALFUNC should be specified
  238.       if and only if both state-transition functions  are
  239.       specified. 
  240.      </para></listitem>
  241.    </itemizedlist>
  242.   </para>  
  243.   
  244.   <para>
  245.    An aggregate function may also  require  one or two initial conditions,
  246.  one for
  247.    each transition function.  These are specified and  stored
  248.    in the database as fields of type <type>text</type>.
  249.   </para>
  250.   
  251.   <refsect2 id="R2-SQL-CREATEAGGREGATE-3">
  252.    <refsect2info>
  253.     <date>1998-09-09</date>
  254.    </refsect2info>
  255.    <title>
  256.     Notes
  257.    </title>
  258.    <para>
  259.     Use <command>DROP AGGREGATE</command>
  260.     to drop aggregate functions.
  261.    </para>
  262.    <para>
  263.     It  is possible to specify aggregate functions
  264.     that have varying combinations of state  and  final  functions. 
  265.     For example, the <function>count</function> aggregate requires SFUNC2
  266.     (an incrementing function) but not  SFUNC1  or  FINALFUNC,
  267.     whereas  the  <function>sum</function> aggregate requires SFUNC1 (an addition
  268.     function) but not SFUNC2 or FINALFUNC  and  the  <function>avg</function>
  269.     aggregate  requires 
  270.     both  of the above state functions as
  271.     well as a FINALFUNC (a division function) to  produce  its
  272.     answer.   In any case, at least one state function must be
  273.     defined, and any SFUNC2 must have  a  corresponding  INITCOND2.
  274.    </para>
  275.   </refsect2>
  276.  </refsect1>
  277.  <refsect1 id="R1-SQL-CREATEAGGREGATE-2">
  278.   <title>
  279.    Usage
  280.   </title>
  281.   <para>
  282.    Refer to the chapter on aggregate functions
  283.    in the <citetitle>PostgreSQL Programmer's Guide</citetitle>
  284.    on aggregate functions for
  285.    complete examples of usage.
  286.   </para>   
  287.  </refsect1>
  288.  <refsect1 id="R1-SQL-CREATEAGGREGATE-3">
  289.   <title>
  290.    Compatibility
  291.   </title>
  292.   <refsect2 id="R2-SQL-CREATEAGGREGATE-4">
  293.    <refsect2info>
  294.     <date>1998-09-09</date>
  295.    </refsect2info>
  296.    <title>
  297.     SQL92
  298.    </title>
  299.    <para>
  300.     <command>CREATE AGGREGATE</command> 
  301.     is a <productname>Postgres</productname> language extension.
  302.     There is no <command>CREATE AGGREGATE</command> in SQL92.
  303.    </para>
  304.   </refsect2>
  305.  </refsect1>
  306. </refentry>
  307. <!-- Keep this comment at the end of the file
  308. Local variables:
  309. mode: sgml
  310. sgml-omittag:nil
  311. sgml-shorttag:t
  312. sgml-minimize-attributes:nil
  313. sgml-always-quote-attributes:t
  314. sgml-indent-step:1
  315. sgml-indent-data:t
  316. sgml-parent-document:nil
  317. sgml-default-dtd-file:"../reference.ced"
  318. sgml-exposed-tags:nil
  319. sgml-local-catalogs:"/usr/lib/sgml/catalog"
  320. sgml-local-ecat-files:nil
  321. End:
  322. -->