###### SQL basic concepts for interview

Today let's learn about the rank and partition feature of SQL. This is a very useful feature of SQL and is used in many places. Let's see how it works. RANK AND PARTITION FEATURE OF SQL ================================

## JOINS

Let's say we have a table called employee with the following data:

```
SELECT id, name, salary, department,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employee;
```

The above query will give us the following result:

```
+----+----------+--------+------------+------+
| id | name | salary | department | rank |
+----+----------+--------+------------+------+
| 6 | Alice | 60000 | HR | 1 |
| 5 | Bob | 50000 | HR | 2 |
| 4 | Mary | 40000 | HR | 3 |
| 3 | Smith | 30000 | IT | 1 |
| 2 | John | 20000 | IT | 2 |
| 1 | Prasanna | 10000 | IT | 3 |
+----+----------+--------+------------+------+
```

As you can see, the rank is calculated based on the salary of the employee in each department. The employee with the highest salary in each department gets the rank 1, the employee with the second highest salary gets the rank 2 and so on.

What we did here is we partitioned the rows by department and then ordered them by salary. This means that the rows are grouped by department and then ordered by salary. The rank is calculated based on the order of the rows in each group.

Below are the various functions that can be used with the rank and partition feature:

- RANK(): This function returns the rank of each row in a group of rows. The rank is calculated based on the order of the rows in each group.
- DENSE_RANK(): This function returns the rank of each row in a group of rows. The rank is calculated based on the order of the rows in each group. The difference between this function and the RANK function is that this function does not skip any ranks. For example, if there are two rows with the same rank, then the next row will have the rank 3.
- ROW_NUMBER() :This function returns the row number of each row in a group of rows. The row number is calculated based on the order of the rows in each group.
- NTILE() :This function returns the rank of each row in a group of rows. The rank is calculated based on the order of the rows in each group. The difference between this function and the RANK function is that this function does not skip any ranks. For example, if there are two rows with the same rank, then the next row will have the rank 3.

Referrences

https://www.sqlservertutorial.net/sql-server-window-functions/sql-server-rank-function/ https://medium.com/snowflake/how-qualify-works-with-in-depth-explanation-and-examples-bbde9fc742db