You usually select aggregate functions to operate on windows of data.
However you can also query ranking functions on the windows as well. These do
not operate on ranges. They almost always need an ORDER BY for window
definition. Examples of such ranking functions are ROW_NUMBER, NTILE, RANK, and
DENSE_RANK.
ROW_NUMBER counts incrementally from 1 within the current partition.
NTILE splits the partition into a specified number of buckets, and tells you
what bucket the current row is in. For example, NTILE(100) will chop the
partition into 100 buckets, and you get a value between 1 and 100 from the
function, like a percentage.
RANK gives you a count like ROW_NUMBER, but rows
with the same value in the ORDER BY column all get the same value. So ties get
the same rank. However there will be a jump in rank value after such ties.
DENSE_RANK acts like RANK except it does not skip any values in the RANK even
when there are ties in the column values.