DENSE_RANK
Returns an ascending sequence of integers, starting with 1. The
              output sequence produces duplicate integers for duplicate values
              of the ORDER BY expressions. After generating
              duplicate output values for the tied
 input values, the
              function continues the sequence with the next higher integer.
              Therefore, the sequence contains duplicates but no gaps when the
              input contains duplicates. Starts the sequence over for each group
              produced by the PARTITIONED BY clause.
Syntax:
DENSE_RANK() OVER([partition_by_clause] order_by_clause) The PARTITION BY clause is optional. The
                ORDER BY clause is required. The window clause
              is not allowed. 
Usage notes:
 Often used for top-N and bottom-N queries. For example, it could
              produce a top 10
 report including all the items with the 10
              highest values, even if several items tied for 1st place. 
 Similar to ROW_NUMBER and
              RANK. These functions differ in how they treat
              duplicate combinations of values. 
Examples:
 The following example demonstrates how the
                DENSE_RANK() function identifies where each
              value places
 in the result set, producing the same result
              for duplicate values, but with a strict sequence from 1 to the
              number of groups. For example, when results are ordered by the
                X column, both 1 values are
              tied for first; both 2 values are tied for
              second; and so on. 
select x, dense_rank() over(order by x) as rank, property from int_t;
+----+------+----------+
| x  | rank | property |
+----+------+----------+
| 1  | 1    | square   |
| 1  | 1    | odd      |
| 2  | 2    | even     |
| 2  | 2    | prime    |
| 3  | 3    | prime    |
| 3  | 3    | odd      |
| 4  | 4    | even     |
| 4  | 4    | square   |
| 5  | 5    | odd      |
| 5  | 5    | prime    |
| 6  | 6    | even     |
| 6  | 6    | perfect  |
| 7  | 7    | lucky    |
| 7  | 7    | lucky    |
| 7  | 7    | lucky    |
| 7  | 7    | odd      |
| 7  | 7    | prime    |
| 8  | 8    | even     |
| 9  | 9    | square   |
| 9  | 9    | odd      |
| 10 | 10   | round    |
| 10 | 10   | even     |
+----+------+----------+
 The following examples show how the
                DENSE_RANK() function is affected by the
                PARTITION property within the ORDER
                BY clause. 
 Partitioning by the PROPERTY column groups all
              the even, odd, and so on values together, and
                DENSE_RANK() returns the place of each value
              within the group, producing several ascending sequences. 
select x, dense_rank() over(partition by property order by x) as rank, property from int_t;
+----+------+----------+
| x  | rank | property |
+----+------+----------+
| 2  | 1    | even     |
| 4  | 2    | even     |
| 6  | 3    | even     |
| 8  | 4    | even     |
| 10 | 5    | even     |
| 7  | 1    | lucky    |
| 7  | 1    | lucky    |
| 7  | 1    | lucky    |
| 1  | 1    | odd      |
| 3  | 2    | odd      |
| 5  | 3    | odd      |
| 7  | 4    | odd      |
| 9  | 5    | odd      |
| 6  | 1    | perfect  |
| 2  | 1    | prime    |
| 3  | 2    | prime    |
| 5  | 3    | prime    |
| 7  | 4    | prime    |
| 10 | 1    | round    |
| 1  | 1    | square   |
| 4  | 2    | square   |
| 9  | 3    | square   |
+----+------+----------+
 Partitioning by the X column groups all the
              duplicate numbers together and returns the place each value within
              the group; because each value occurs only 1 or 2 times,
                DENSE_RANK() designates each X
              value as either first or second within its group. 
select x, dense_rank() over(partition by x order by property) as rank, property from int_t;
+----+------+----------+
| x  | rank | property |
+----+------+----------+
| 1  | 1    | odd      |
| 1  | 2    | square   |
| 2  | 1    | even     |
| 2  | 2    | prime    |
| 3  | 1    | odd      |
| 3  | 2    | prime    |
| 4  | 1    | even     |
| 4  | 2    | square   |
| 5  | 1    | odd      |
| 5  | 2    | prime    |
| 6  | 1    | even     |
| 6  | 2    | perfect  |
| 7  | 1    | lucky    |
| 7  | 1    | lucky    |
| 7  | 1    | lucky    |
| 7  | 2    | odd      |
| 7  | 3    | prime    |
| 8  | 1    | even     |
| 9  | 1    | odd      |
| 9  | 2    | square   |
| 10 | 1    | even     |
| 10 | 2    | round    |
+----+------+----------+
 The following example shows how DENSE_RANK() produces a continuous
              sequence while still allowing for ties. In this case, Croesus and Midas both have the
              second largest fortune, while Crassus has the third largest. (In the RANK
                function section, you see a similar query with the RANK()
              function that shows that while Crassus has the third largest fortune, he is the fourth
              richest person.) 
select dense_rank() over (order by net_worth desc) as placement, name, net_worth from wealth order by placement, name;
+-----------+---------+---------------+
| placement | name    | net_worth     |
+-----------+---------+---------------+
| 1         | Solomon | 2000000000.00 |
| 2         | Croesus | 1000000000.00 |
| 2         | Midas   | 1000000000.00 |
| 3         | Crassus | 500000000.00  |
| 4         | Scrooge | 80000000.00   |
+-----------+---------+---------------+
