1. Introdução

Veremos neste artigo como utilizar instruções SQL para gerar grupos combinados de três elementos, um assunto abordado no estudo da “Análise Combinatória”. Aqui, veremos como formular consultas para obter combinações e arranjos de elementos agrupados 3 a 3.

2. Arranjos 3 a 3

Utilizaremos a tabela T_CONJUNTO, a qual possui apenas uma tabela e 4 registros, conforme vemos na Figura 1.

Tabela T_CONJUNTO

Figura 1 Tabela T_CONJUNTO

Suponha que se deseja realizar o arranjo destes 4 elementos em grupos de 3. A Listagem 1 mostra como obter tal resultado. Do código, podemos destacar alguns pontos importantes:

  • É necessário utilizar 3 instâncias da tabela na cláusula FROM.
  • Também é preciso utilizar um certo número de restrições na cláusula WHERE com objetivo de evitar que linhas com elementos repetidos sejam retornadas. Basicamente, é preciso comparar todos os pares de tabelas que podem ser formados (C1 com C2, C1 com C3 e C2 com C3).

Listagem 1: Arranjo dos Elementos 3 a 3


SELECT * FROM T_CONJUNTO C1, T_CONJUNTO C2, T_CONJUNTO C3
WHERE (C1.ELEMENTO <> C2.ELEMENTO) 
      AND (C1.ELEMENTO <> C3.ELEMENTO) 
      AND (C2.ELEMENTO <> C3.ELEMENTO)
ORDER BY 1,2,3
 

Para arranjos, o número de grupos é N!/(N-P)!, onde N é a quantidade original de elementos a serem agrupados e P a quantidade de elementos em cada grupo. No nosso caso, o resultado terá 4!/(4-3)! = 24 registros, conforme observamos na Figura 2.

Resultado da Consulta - Arranjos dos elementos 3 a 3

Figura 2: Resultado da Consulta - Arranjos dos elementos 3 a 3

3. Combinações 3 a 3

De maneira análoga, podemos produzir as combinações de elementos 3 a 3 (Listagem 2).

Listagem 2: Combinação de Elementos 3 a 3


SELECT * FROM T_CONJUNTO C1, T_CONJUNTO C2, T_CONJUNTO C3
WHERE (C1.ELEMENTO < C2.ELEMENTO) 
      AND (C1.ELEMENTO < C3.ELEMENTO) 
      AND (C2.ELEMENTO < C3.ELEMENTO)
ORDER BY 1,2,3
 

Para combinações o número de grupos resultantes é N!/(N-P)!xP!, onde N e P são os mesmos explicados para os arranjos. Neste caso, o resultado foi 4!/(4-3)!x3! = 4 registros (ver a Figura 3).

Resultado da Consulta - Combinação dos elementos 3 a 3

Figura 3: Resultado da Consulta - Combinação dos elementos 3 a 3

4. Modelo Geral para Combinações e Arranjos

Dos exemplos apresentados, podemos concluir que deveremos usar as seguintes regras sempre que for desejado realizar o arranjo ou combinação de N elementos tomados P a P:

  • Instanciar a tabela P vezes na cláusula FROM.
  • Comparar todos os possíveis pares de tabelas instanciadas na cláusula WHERE. Usa-se a desigualdade quando deseja-se formar arranjos ( “<> ”) e o operador “menor que” ( “ < ” ) para realizarmos combinações.

Assim finalizamos este artigo sobre análise combinatória utilizando a linguagem SQL.