RANK & DENSE_RANK Functions
Parte da seção Fundamentos do Journey de SQL da Coddy — lição 65 de 72.
ROW_NUMBER() é um tipo de função de classificação, e há mais duas: RANK() e DENSE_RANK().
A função RANK() numera as linhas como ROW_NUMBER(), mas atribui números idênticos para as mesmas linhas e pula números. DENSE_RANK() é semelhante ao RANK(), mas não pula números.
Por exemplo:
| id | level |
| 1 | 5 |
| 2 | 6 |
| 3 | 6 |
| 4 | 7 |
| 5 | 7 |
| 6 | 5 |
SELECT id,
ROW_NUMBER() OVER (ORDER BY level) as row_num,
RANK() OVER (ORDER BY level) as row_rank,
DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1Isso retornará:
| id | row_num | row_rank | row_dense_rank |
| 1 | 1 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 2 | 3 | 3 | 2 |
| 3 | 4 | 3 | 2 |
| 4 | 5 | 5 | 3 |
| 5 | 6 | 5 | 3 |
Explicação:
ROW_NUMBER(): Sempre único: 1, 2, 3, 4, 5, 6RANK():- nível 5 (2 linhas): ambos recebem rank 1
- nível 6 (2 linhas): ambos recebem rank 3 (pula 2)
- nível 7 (2 linhas): ambos recebem rank 5 (pula 4)
DENSE_RANK():- nível 5 (2 linhas): ambos recebem rank 1
- nível 6 (2 linhas): ambos recebem rank 2 (sem pulo)
- nível 7 (2 linhas): ambos recebem rank 3 (sem pulo)
Desafio
FácilTabelas e colunas disponíveis:
<strong>medals</strong>:<strong>region</strong>,<strong>medal_color</strong>,<strong>medal_count</strong>
Crie uma consulta que mostre a região, contagem total de medalhas (soma de todas as medalhas independentemente da cor), e dois tipos de classificações:
- Um
regular_rank(com lacunas) sobre a soma das medalhas - Um
dense_rank(sem lacunas) sobre a soma das medalhas
Ordene o resultado por:
order by total_medals desc, region ascFolha de consulta
O SQL fornece três funções de classificação que se comportam de forma diferente com valores empatados:
ROW_NUMBER()- atribui números sequenciais únicosRANK()- atribui o mesmo rank para valores empatados e pula os ranks subsequentesDENSE_RANK()- atribui o mesmo rank para valores empatados sem pular ranks
Por exemplo:
| id | level |
| 1 | 5 |
| 2 | 6 |
| 3 | 6 |
| 4 | 7 |
| 5 | 7 |
| 6 | 5 |
SELECT id,
ROW_NUMBER() OVER (ORDER BY level) as row_num,
RANK() OVER (ORDER BY level) as row_rank,
DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1Isso retornará:
| id | row_num | row_rank | row_dense_rank |
| 1 | 1 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 2 | 3 | 3 | 2 |
| 3 | 4 | 3 | 2 |
| 4 | 5 | 5 | 3 |
| 5 | 6 | 5 | 3 |
Experimente você mesmo
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns9Multiple tables
Basic Join Part 1Basic Join Part 2Recap - JoinSelf joinRecap - Self JoinUnionSimplify queries, WITH keywordRecap - With QueriesRecap - Real Estate Contractor12Window Functions part 2
RANK & DENSE_RANK FunctionsRecap - RANK & DENSE_RANKNTILE FunctionAggregation FunctionsROWS & RANGE Criterion