In general, the expression in the partition by clause divides the set of rows that results from the query in groups and the rank() function operates within these groups; in other words, rank() is reset when the defining expression of the group changes. The order by clause attached to the rank specifies the ranking criterion and the order of the rows in each group.