SQLite RANK

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 BYcláusula divide as linhas do conjunto de resultados em partições.
  • Segundo, a ORDER BYclá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 RankDemoque possui uma coluna:

CREATE TABLE RankDemo (
	Val TEXT
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira algumas linhas na RankDemotabela:

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 RankDemotabela:

SELECT 
	*
FROM
	RankDemo;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Tabela de amostra SQLite RANK

Quarto, use a RANK() função para atribuir classificações às linhas no conjunto de resultados da RankDemotabela:

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:

Exemplo SQLite RANK

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 trackstabela do banco de dados de exemplo .

Usando RANK()a função SQLite com ORDER BYexemplo 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 BYcláusula, portanto, a RANK()função trata todo o conjunto de resultados como uma única partição.

Primeiro, a ORDER BYcláusula classifica as faixas por seus comprimentos ( Millisecondscoluna).

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 BYexemplo

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:

Exemplo SQLite RANK com PARTITION BY

Neste exemplo:

  • Primeiro, a PARTITION BYcláusula divide as faixas em álbuns.
  • Em seguida, a ORDER BYclá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, a RANK()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:

SQLite RANK - Encontra o enésimo maior por grupo

Neste tutorial, você aprendeu como usar a RANK()função SQLite para atribuir uma classificação a cada linha em um conjunto de resultados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *