In many cases we want to apply the aggregate functions to subgroups of tuples in a relation,based on some attribute values. The GROUP BY clause specifies the grouping attributes, which should also appear in the SELECT clause,so that the value resulting from applying each function to a group of tuples appears along with the value of the grouping attribute(s).Special use of GROUP BY is to associate an aggregate function (especially COUNT; counting the number of rows in each group) with groups of rows. First, assume that the Antiques table has the Price column, and each row has a value for that column. We want to see the price of the most expensive item bought by each owner. We have to tell SQL to group each owner's purchases, and tell us the maximum purchase price: SELECT BUYERID, MAX(PRICE) FROM ANTIQUES GROUP BY BUYERID; Now, say we only want to see the maximum purchase price if the purchase is over $1000, so we use the HAVING clause: SELECT BUYERID, MAX(PRICE) FROM ANTIQUES GROUP BY BUYERID HAVING PRICE > 1000;