Dúvida max sem função

Dúvida max sem função

por Claudio Henrique Pizarro da Silva -
Número de respostas: 3

Por favor,

para selecionar o valor maximo de um atributo seria algo:

WHERE r1.atributo > r2.atributo AND NOT EXIST r1.atributo < r2.atributo

Em resposta à Claudio Henrique Pizarro da Silva

Re: Dúvida max sem função

por Rafael Sampaio -

Oi, Cláudio!

Sim. Observe este exemplo:

CREATE TABLE Pessoas
(
    PessoaID int PRIMARY KEY,
    Nome varchar(255),
    Idade int
);

INSERT INTO Pessoas VALUES (1, 'Aline',  23);
INSERT INTO Pessoas VALUES (2, 'Rafael', 29);
INSERT INTO Pessoas VALUES (3, 'Amanda', 32);
INSERT INTO Pessoas VALUES (4, 'Wisley', 19);

SELECT 'Sem funcao agregada:' As '';

SELECT Idade FROM Pessoas p1
WHERE NOT EXISTS
                  (SELECT 1 FROM Pessoas p2 WHERE p2.idade > p1.idade);

SELECT 'Com funcao agregada:' As '';

SELECT max(Idade) FROM Pessoas;

Em resposta à Rafael Sampaio

Re: Dúvida max sem função

por Claudio Henrique Pizarro da Silva -

Obrigadão Rafael, apenas uma pergunta

onde está escrito:

"SELECT 1 FROM Pessoas p2 WHERE p2.idade > p1.idade"

seria:

SELECT p1 FROM Pessoas p2 WHERE p2.idade > p1.idade

 

Obrigado!

Em resposta à Claudio Henrique Pizarro da Silva

Re: Dúvida max sem função

por Rafael Sampaio -

Oi, Cláudio!

Na realidade, não. A ideia é que a subconsulta irá marcar todas as tuplas em que a idade de p2 supera a idade de p1. Quando não houver essa marcação, a idade p1 é maior. Como a consulta principal deve mostrar as idades de cujas tuplas não existem marcação ("not exists"), ela irá mostrar a maior idade entre todas. Essa ideia tem esta motivação: sejam x1, x2, x3, ... xn, não havendo nenhuma ordenação a priori entre os elementos. Tome xi e compare com todos os outros xj, com i != j. Se xi > xj, para todo j, então xi é o máximo.

Observe também que p1 é um "apelido" da tabela Pessoas. Uma instrução SELECT é da forma SELECT col1, col2, ... FROM tabela WHERE condição. Dessa forma, SELECT p1 não seria uma instrução válida.
Por fim, caso você quisesse a menor idade, bastaria mudar o sinal de comparação na subconsulta.

Tudo bem?

Abraço,
Rafael