Categories:

Aggregate Functions (General) , Window Functions (General, Window frame)

VAR_POP

Returns the population variance of non-NULL records in a group. If all records inside a group are NULL, a NULL is returned.

Aliases:

VARIANCE_POP

Syntax

Aggregate function

VAR_POP( [DISTINCT] <expr1> )

Window function

VAR_POP( <expr1> ) OVER (
                        [ PARTITION BY <expr2> ]
                        [ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
                        )

For details about window_frame syntax, see Window Frame Syntax and Usage.

Arguments

expr1

The expr1 should evaluate to one of the numeric data types.

expr2

This is the optional expression to partition by.

expr3

This is the optional expression to order by within each partition.

Returns

The data type of the returned value is NUMBER(<precision>, <scale>). The scale depends upon the values being processed.

Usage Notes

  • For single-record inputs, STDDEV_SAMP and STDDEV both return NULL. This is different from the Oracle behavior, where STDDEV_SAMP returns NULL for a single record and STDDEV returns 0.

  • When passed a VARCHAR expression, this function implicitly casts the input to floating point values. If the cast cannot be performed, an error is returned.

  • When called as a window function:

    • The keyword DISTINCT is permitted syntactically, but is ignored.

    • If an ORDER BY sub-clause is used inside the OVER clause, then a window frame must be used. If no window frame is specified, then the ORDER BY implies a cumulative window frame:

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      For more details about window frames, including syntax and examples, see Window Frame Syntax and Usage.

      For more information about implied window frames, see Window Frame Usage Notes.

Examples

This example shows how to use the VAR_POP function:

Create and fill a table:

create table aggr(k int, v decimal(10,2), v2 decimal(10, 2));
insert into aggr values 
   (1, 10, null),
   (2, 10, 11), 
   (2, 20, 22), 
   (2, 25, null), 
   (2, 30, 35);

Query the table, calling VAR_POP():

SELECT k, var_pop(v), var_pop(v2) 
    FROM aggr 
    GROUP BY k;
+---+---------------+---------------+
| K |    VAR_POP(V) |   VAR_POP(V2) |
|---+---------------+---------------|
| 1 |  0.0000000000 |          NULL |
| 2 | 54.6875000000 | 96.2222222222 |
+---+---------------+---------------+