RDOHELP72.HLB  —  Value expr, statistical_expression
    Calculates a value based on a value expression for every record
    in a record stream. When you use a statistical expression (except
    for COUNT), you specify a value expression and a record selection
    expression (RSE). Oracle Rdb first evaluates the value expression
    for each record in the record stream formed by the RSE. Then it
    calculates a single value based on all the results of the first
    step.  Statistical expressions are also called aggregate
    expressions.

    For more information on value expressions and record selection
    expressions, ask for HELP on Value_expr and RSE.

1  –  Format

  (B)0statistical-expr =

    qqqqqqqwqq> MAX qqqqqwqq> value-expr qqwqq> OF qq> rse qq>
           tqq> MIN qqqqqu                 x
           tqq> TOTAL qqqu                 x
           tqq> AVERAGE qj                 x
           mqq> COUNT qqqqqqqqqqqqqqqqqqqqqj

1.1  –  MAX

    --> MAX --> value-expr --> OF --> rse -->

    Find the highest paid employee in the company:

    START_TRANSACTION READ_ONLY

    FOR SAL IN CURRENT_SALARY WITH SAL.SALARY_AMOUNT =
        MAX CURR.SALARY_AMOUNT OF
            CURR IN CURRENT_SALARY
    PRINT SAL.EMPLOYEE_ID,
          SAL.LAST_NAME,
          SAL.SALARY_AMOUNT
    END_FOR

    COMMIT

1.2  –  MIN

    --> MIN --> value-expr --> OF --> rse -->

    Find the job title with the smallest minimum salary:

    FOR J IN JOBS WITH J.MINIMUM_SALARY =
          MIN JM.MINIMUM_SALARY OF JM IN JOBS
    PRINT J.JOB_TITLE,
          J.MINIMUM_SALARY
    END_FOR

1.3  –  TOTAL

    --> TOTAL --> value-expr --> OF --> rse -->

    Assign the total payroll for the company to a host language
    variable:

    &RDB&   START_TRANSACTION READ_ONLY
    &RDB&       GET TOTAL-SALARY = TOTAL CH.SALARY_AMOUNT
    &RDB&            OF CH IN CURRENT_SALARY
    &RDB&   END_GET
    &RDB&   COMMIT

1.4  –  AVERAGE

    --> AVERAGE --> value-expr --> OF --> rse -->

    Display the average salary of all the employees whose salaries
    exceed $50,000:

    PRINT  AVERAGE CS.SALARY_AMOUNT OF
            CS IN CURRENT_SALARY WITH
             CS.SALARY_AMOUNT GT 50000

1.5  –  COUNT

    --> COUNT --> OF --> rse -->

    The following COBOL code fragment finds out the number of
    employees who live in a particular state, specified by the host
    language variable STATE:

    ACCEPT STATE.
    &RDB&   GET STATE-COUNT = COUNT OF E IN EMPLOYEES
    &RDB&            WITH E.STATE = STATE
    &RDB&   END_GET
            DISPLAY "Number of employees in ", STATE, " is ",
                STATE-COUNT.

2  –  More

    If you invoke multiple databases in the RDO interface and declare an
    aggregate expression, Oracle Rdb returns an %RDB-E-INVALID_BLR error.
    For example:

    RDO> INVOKE DATABASE FEE = FILENAME USER1:[STUDENT_FEES]STUDENTDB
    RDO> INVOKE DATABASE STA = FILENAME USER2:[STUDENT_FEES]STATS
    RDO>
    RDO> START_TRANSACTION ON FEE USING
    cont>   (READ_ONLY RESERVING FEE.TRANS FOR SHARED READ) AND
    cont>    ON STA USING (READ_WRITE RESERVING STA.STATDATA FOR
    cont>    EXCLUSIVE WRITE)
    RDO>
    RDO>   FOR TX IN FEE.TRANS SORTED BY TX.SNO, TX.SESS, TX.TYPE
    cont>          REDUCED TO TX.SNO, TX.SESS, TX.TYPE
    cont>        WITH TX.SESS = "91S"
    cont>     STORE SX IN STA.STATDATA USING
    cont>        SX.SNO = TX.SNO;
    cont>        SX.SESS = TX.SESS;
    cont>        SX.TYPE = TX.TYPE;
    cont>        SX.AMOUNT = (TOTAL T1.AMOUNT OF T1 IN FEE.TRANS WITH
    cont>           T1.SNO = TX.SNO AND
    cont>           T1.SESS = TX.SESS AND
    cont>           T1.TYPE = TX.TYPE);
    cont>     END_STORE
    cont>  END_FOR
    %RDB-E-INVALID_BLR, request BLR is incorrect at offset 172
    RDO> ROLLBACK;
Close Help