Aggregate Functions (SQL)
GROUP BY
Aggregate functions are used in conjunction with the group by clause. A group by clause splits a resultset into groups of rows and aggregate functions perform calculations on them. (Ferrari and Pirozzi 2023, 131)
Function | Description |
---|---|
AVG() |
|
COUNT() |
|
MAX() |
|
MIN() |
|
SUM() |
|
ARRAY_AGG |
|
JSON_AGG or JSONB_AGG |
|
BOOL_AND(Predicate) |
|
BOOL_OR(Predicate) |
SELECT category, COUNT(*) FROM posts GROUP BY category; -- Outputs: category | count ----------+------- 3 | 1 1 | 2
You can also filter the result of a GROUP BY
by using HAVING
:
SELECT category, COUNT(*) FROM posts GROUP BY category HAVING COUNT(*) > 1;
and also pack multiple aggregations in a single SELECT
statement:
SELECT category, COUNT(*), COUNT(*) FILTER (WHERE replies > 2) as number_of_replies FROM posts GROUP BY category HAVING COUNT(*) > 1;
GROUPING SETS
, CUBE
, and ROLLUP
More complex grouping operations than those described above are possible using the concept of grouping sets. The data selected by the
FROM
andWHERE
clauses is grouped separately by each specified grouping set, aggregates computed for each group just as for simple GROUP BY clauses, and then the results returned.