Using the HAVING clause
In the previous section, we discussed about GROUP BY clause, however if you want to restrict the groups of returned rows, you can use HAVING clause. The HAVING clause is used to specify which individual group(s) is to be displayed, or in simple language we use the HAVING clause in order to filter the groups on the basis of an aggregate function condition.
Note: The WHERE clause cannot be used to return the desired groups. The WHERE clause is only used to restrict individual rows. When the GROUP BY clause is not used, the HAVING clause works like the WHERE clause.
The syntax for the PostgreSQL HAVING clause is as follows:
SELECT expression1, expression2, ... expression_n, aggregate_function (expression) FROM tables WHERE conditions GROUP BY expression1, expression2, ... expression_n HAVING group_condition;
Parameters or arguments
aggregate_function can be a function such as SUM, COUNT, MIN, MAX, or AVG.
expression1, expression2, ... expression_n are expressions that are not encapsulated within an aggregate function and must be included in the GROUP BY clause.
conditions are the conditions used to restrict the groups of returned rows. Only those groups whose condition evaluates to true will be included in the result set.
Let's consider an example where you try to fetch the product that has sales>10000:
SELECT product, SUM(sale) AS "Total sales" FROM order_details GROUP BY product Having sum(sales)>10000;
The PostgreSQL HAVING clause will filter the results so that only the total sales greater than 10000 will be returned.