## ANSI SQL Aggregate Functions

Aggregate functions return a single value based upon a set of other values. If used among other expressions in the item list of a SELECT statement, the SELECT must have a GROUP BY or HAVING clause. No GROUP BY or HAVING clause is required if the aggregate function is the only value retrieved by the SELECT statement. The aggregate functions supported by the ANSI SQL standard and their syntax are listed in Table 4-1.

Table 4-1. ANSI SQL aggregate functions
 Function Usage `AVG`(`expression`) Computes the average value of a column given by `expression` `CORR`(`dependent`, `independent`) Computes a correlation coefficient `COUNT`(`expression`) Counts the rows defined by the `expression` `COUNT`(*) Counts all rows in the specified table or view `COVAR_POP`(`dependent`, `independent`) Computes population covariance `COVAR_SAMP`(`dependent`, `independent`) Computes sample covariance `CUME_DIST`(`value_list`) `WITHIN GROUP` (`ORDER BY` `sort_list`) Computes the relative rank of a hypothetical row within a group of rows, where the rank is equal to the number of rows less than or equal to the hypothetical row divided by the number of rows in the group `DENSE_RANK`(`value_list`) `WITHIN GROUP` (`ORDER BY` `sort_list`) Generates a dense rank (no ranks are skipped) for a hypothetical row (`value_list`) in a group of rows generated by GROUP BY `MIN`(`expression`) Finds the minimum value in a column given by `expression` `MAX`(`expression`) Finds the maximum value in a column given by `expression` `PERCENT_RANK`(`value_list`) `WITHIN GROUP` (`ORDER BY` `sort_list`) Generates a relative rank for a hypothetical row by dividing that row’s rank less 1 by the number of rows in the group `PERCENTILE_CONT`(`percentile`) `WITHIN GROUP` (`ORDER BY` `sort_list`) Generates an interpolated value that, if added to the group, would correspond to the `percentile` given `PERCENTILE_DISC`(`percentile`) `WITHIN GROUP` (`ORDER BY` `sort_list`) Returns the value with the smallest cumulative distribution value greater than or equal to `percentile` `RANK`(`value_list`) `WITHIN GROUP` (`ORDER BY` `sort_list`) Generates a rank for a hypothetical row (`value_list`) in a group of rows generated by GROUP BY `REGR_AVGX`(`dependent`, `independent`) Computes the average of the independent variable `REGR_AVGY`(`dependent`, `independent`) Computes the average of the dependent variable `REGR_COUNT`(`dependent`, `independent`) Counts the number of pairs remaining in the group after any pair with one or more NULL values has been eliminated `REGR_INTERCEPT`(`dependent`, `independent`) Computes the y-intercept of the least-squares-fit linear equation `REGR_R2`(`dependent`, `independent`) Squares the correlation coefficient `REGR_SLOPE`(`dependent`, `independent`) Determines the slope of the least-squares-fit linear equation `REGR_SXX`(`dependent`, `independent`) Sums the squares of the independent variables `REGR_SXY`(`dependent`, `independent`) Sums the products of each pair of variables `REGR_SYY`(`dependent`, `independent`) Sums the squares of the dependent variables `STDDEV_POP`(`expression`) Computes the population standard deviation of all `expression` values in a group `STDDEV_SAMP`(`expression`) Computes the sample standard deviation of all `expression` values in a group `SUM`(`expression`) Computes the sum of the column values given by `expression` `VAR_POP`(`expression`) Computes the population variance of all `expression` values in a group `VAR_SAMP`(`expression`) Computes the sample standard deviation of all `expression` values in a group

Technically speaking, ALL, ANY, and SOME are considered aggregate functions. However, they have been discussed as range search criteria since they are most often used that way. Refer to Chapter 3 for more information on these functions.

The number of values processed by an aggregate function varies depending on the number of rows queried from the table. This behavior differentiates aggregate functions from scalar functions, which can only operate on the values of a single row per invocation.

The general syntax of an aggregate function is:

``aggregate_function_name`( [ALL | DISTINCT] `expression` )`

The `aggregate_function_name` may be AVG, COUNT, MAX, MIN, or SUM, as listed in Table 4-1. The ALL keyword, which specifies the default behavior, evaluates all rows when aggregating the value of the function. The DISTINCT keyword uses only distinct values when evaluating the function.

### Warning

All aggregate functions except COUNT(*) will ignore NULL values when computing their results.

Get SQL in a Nutshell, 3rd Edition now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.