Por favor,
para selecionar o valor maximo de um atributo seria algo:
WHERE r1.atributo > r2.atributo AND NOT EXIST r1.atributo < r2.atributo
Por favor,
para selecionar o valor maximo de um atributo seria algo:
WHERE r1.atributo > r2.atributo AND NOT EXIST r1.atributo < r2.atributo
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;
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!
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