Olá!
Já que com o OFFSET saltamos um determinado números de registros, qual seria o comando para contar registros pares ou ímpares , de 2 em 2 ou de 3 em 3?
Olá!
Já que com o OFFSET saltamos um determinado números de registros, qual seria o comando para contar registros pares ou ímpares , de 2 em 2 ou de 3 em 3?
Oi, Helon! Tudo bem?
Peço desculpas pela demora em retornar.
Para entender como podemos desenvolver scripts SQL capazes de pular determinados registros através de uma lógica específica, irei seguir esta sequência: apresentar o código e, logo em seguida, explicar o seu funcionamento. Vamos nessa?
Durante todos os exemplos, teremos como base a tabela aluno
criada durante o curso!
1 - Apresentação de registros cujo id
é um número par
SELECT id, nome FROM aluno
WHERE id % 2 = 0;
id
e o nome
dos alunos;WHERE
, filtramos apenas os registros cujo resto da divisão por 2 é igual a 0 (indicando que se trata de um número par). Esse processo é possível, pois utilizamos o símbolo de porcentagem, que coleta o módulo de uma divisão.2 - Apresentação de registros cujo id
é um número ímpar
Para isso, seguiremos uma ideia parecida da anterior:
SELECT id, nome FROM aluno
WHERE id % 2 = 1;
WHERE
filtramos apenas os registros cujo resto da divisão por 2 é igual a 1 (indicando que se trata de um número ímpar). 3 - Apresentação de registros de 2 em 2
SELECT id, nome
FROM (
SELECT id, nome, row_number() OVER (ORDER BY id) AS numero_linha
FROM aluno
) subconsulta
WHERE (numero_linha -1) % 4 < 2;
Helon, no script SQL acima, estamos trabalhando com subconsultas. Caso você não esteja familiarizado com esse recurso, não se preocupe, pois ao longo dos nossos estudos iremos conhecendo cada vez mais o que o SQL nos proporciona. De maneira geral, estamos realizando as seguintes coisas:
id
e nome
, também terá uma coluna chamada numero_linha
, por meio dela iremos obter o número de cada linha da nossa tabela. Isso é possível, haja vista que utilizamos a função row_number
e ordenamos tais valores a partir da coluna id
da tabela aluno
. Toda essa consulta recebeu, em nosso script, o nome de subconsulta
;WHERE
para filtrar os registros de 2 em 2. Primeiro, recebemos o valor de uma linha e subtraímos 1 dela; após isso, obtemos o módulo da sua divisão por 4; no final, comparamos se o resultado obtido é inferior a 2. Helon, nesse script, a lógica por trás do filtro e os valores usados para tal consideram a quantidade de registros a serem pulados. Observe a tabela abaixo para entender melhor:
id | nome |
---|---|
1 | Ana |
2 | Bruno |
3 | Carla |
4 | Diego |
5 | Elena |
6 | Fábio |
Pulando de dois em dois, teríamos o seguinte resultado:
id | nome |
---|---|
1 | Ana |
2 | Bruno |
5 | Elena |
6 | Fábio |
Note que os alunos com id
3 e 4 não apaceram, uma vez que eles não cumprem o critério exigido pelo filtro. As linhas 3 e 4, quando tem seu número subtraído em uma unidade e coleta-se o módulo da sua divisão por 4, resultarão em um valor maior ou igual a 2.
4 - Apresentação de registros de 3 em 3
Para isso, seguiremos a mesma lógica do item 3, a única diferença será nos valores usados no filtro, observe:
SELECT id, nome
FROM (
SELECT id, nome, row_number() OVER (ORDER BY id) AS numero_linha
FROM aluno
) subconsulta
WHERE (numero_linha -1) % 6 < 3;
numero_linha
, dividir o resultado da subtração por 6 e obter o seu módulo, encontram-se valores menores que 3.Em uma tabela, chegaríamos em algo assim:
id | nome |
---|---|
1 | Ana |
2 | Bruno |
3 | Carla |
Nossa tabela original tinha 6 registros, mas, ao usar o script que apresenta dados de 3 em 3, foi possível observar somente os alunos de id
1, 2 e 3!
Helon, espero ter ajudado! Caso surja alguma dúvida após a minha explicação, estarei aqui para conversarmos sobre isso!
Um forte abraço.