The aggregate, or aggregation functions, initially appear inside the `SELECT`

clause of a query, and they perform computations over sets of values in multiple rows of our relations. The basic aggregation functions supported by every SQL systems are: `MIN`

, `MAX`

, `SUM`

, `AVG`

, and `COUNT`

.

Now that the aggregation functions have been introduced, two new clauses can be added to the SQL select statements. These are the: `GROUP BY`

, and the `HAVING`

clauses.

The

`GROUP BY`

allows us to partition our relations into groups, and then compute aggregated aggregate functions over each group independently.The

`HAVING`

condition allows us to test filters on the results of aggregate values.The difference between the

`WHERE`

and`HAVING`

conditions is the`HAVING`

applies to all the groups generated from the`GROUP BY`

clause. While the`WHERE`

condition applies to single rows at a time.

The syntax looks like this:

SELECT A1, A2, . . . , A(n)FROM R1, R2, . . . , R(m)WHERE <condition>GROUP BY <columns>HAVING <condition>;