Resumo : neste tutorial, você aprenderá como usar RANK()
a função SQLite para calcular as classificações das linhas no conjunto de resultados de uma consulta.
Introdução à RANK()
função SQLite
A RANK()
função é uma função de janela que atribui uma classificação a cada linha no conjunto de resultados de uma consulta. A classificação de uma linha é calculada por um mais o número de classificações anteriores a ela.
O seguinte mostra a sintaxe da RANK()
função:
RANK() OVER (
PARTITION BY <expression1>[{,<expression2>...}]
ORDER BY <expression1> [ASC|DESC], [{,<expression1>...}]
)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
- Primeiro, a
PARTITION BY
cláusula divide as linhas do conjunto de resultados em partições. - Segundo, a
ORDER BY
cláusula especifica as ordens das linhas em cada partição. - Terceiro, a
RANK()
função é aplicada a cada linha em cada partição e reinicializada ao cruzar o limite da partição.
Os mesmos valores de coluna receberão as mesmas classificações. Quando várias linhas têm a mesma classificação, a classificação da próxima linha não é consecutiva. É como a medalha olímpica em que se dois atletas dividirem a medalha de ouro, não haverá medalha de prata.
RANK()
Ilustração SQLite
Primeiro, cria uma nova tabela chamada RankDemo
que possui uma coluna:
CREATE TABLE RankDemo (
Val TEXT
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, insira algumas linhas na RankDemo
tabela:
INSERT INTO RankDemo(Val)
VALUES('A'),('B'),('C'),('C'),('D'),('D'),('E');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, consulte os dados da RankDemo
tabela:
SELECT
*
FROM
RankDemo;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Quarto, use a RANK()
função para atribuir classificações às linhas no conjunto de resultados da RankDemo
tabela:
SELECT
Val,
RANK () OVER (
ORDER BY Val
) ValRank
FROM
RankDemo;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Como você pode ver claramente na saída, a terceira e a quarta linhas recebem a mesma classificação porque têm o mesmo valor. A quinta linha obtém a classificação 5 porque a RANK()
função pula a classificação 4.
RANK()
Exemplos de funções SQLite
Para demonstrar a RANK()
função, usaremos a tracks
tabela do banco de dados de exemplo .
Usando RANK()
a função SQLite com ORDER BY
exemplo de cláusula
A instrução a seguir usa a RANK()
função para classificar as faixas por sua duração:
SELECT
Name,
Milliseconds,
RANK () OVER (
ORDER BY Milliseconds DESC
) LengthRank
FROM
tracks
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo, ignoramos a PARTITION BY
cláusula, portanto, a RANK()
função trata todo o conjunto de resultados como uma única partição.
Primeiro, a ORDER BY
cláusula classifica as faixas por seus comprimentos ( Milliseconds
coluna).
Em segundo lugar, a RANK()
função é aplicada a cada linha do conjunto de resultados considerando as ordens das faixas pelos seus comprimentos.
Usando RANK()
a função SQLite com PARTITION BY
exemplo
A instrução a seguir usa a RANK()
função para atribuir uma classificação a cada faixa de cada álbum:
SELECT
Name,
Milliseconds,
AlbumId,
RANK () OVER (
PARTITION BY AlbumId
ORDER BY Milliseconds DESC
) LengthRank
FROM
tracks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A imagem a seguir mostra a saída parcial:
Neste exemplo:
- Primeiro, a
PARTITION BY
cláusula divide as faixas em álbuns. - Em seguida, a
ORDER BY
cláusula classifica as faixas por comprimento. - Por fim, a
RANK()
função atribui uma classificação a cada faixa de cada álbum. Se o álbum for alterado, aRANK()
função reinicializa o valor da classificação.
É possível encontrar a segunda faixa mais longa de cada álbum usando a seguinte subconsulta:
SELECT
*
FROM (
SELECT
Name,
Milliseconds,
AlbumId,
RANK () OVER (
PARTITION BY AlbumId
ORDER BY Milliseconds DESC
) LengthRank
FROM
tracks
)
WHERE
LengthRank = 2;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A saída é a seguinte:
Neste tutorial, você aprendeu como usar a RANK()
função SQLite para atribuir uma classificação a cada linha em um conjunto de resultados.