GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Dúvida com MAX( )


#21

Ele não junta os valores iguais, vou montar pelo site para entender melhor e mando aqui


#22

Agora ficou mais claro.
Tenho essa tabela:

CREATE TABLE Dividas (
sexo varchar(40),
nome varchar(40) ,
idade varchar(40),
qtd int,
Valor DOUBLE PRECISION
) ;
insert into Dividas values (‘F’,‘Rogério’,‘78’,3,34);
insert into Dividas values (‘M’,‘Sergio’,‘43’,2,66);
insert into Dividas values (‘M’,‘Sergio’,‘43’,3,20);
insert into Dividas values (‘M’,‘Sergio’,‘43’,10,34);
insert into Dividas values (‘M’,‘Pedro’,‘89’,5,77);
insert into Dividas values (‘M’,‘Pedro’,‘67’,4,66);
insert into Dividas values (‘M’,‘Rogério’,‘12’,5,43);
insert into Dividas values (‘F’,‘Maria’,‘22’,2,456);

E quero atingir o resultado desse select, sem o uso do MAX:

select
max(sexo)as Sexo,
max(idade)as idade,
max(nome)as nome,
Sum(qtd) as Dividas,
SUM(Valor) AS Total
from Dividas
group by nome;

http://sqlfiddle.com/#!15/af64c/1
O MAX está aí pq só consigo fazer funcionar com o uso dele:
Usando o DB: FireBird ou PostgreSQL


#23

Esse problema que postou agora é diferente do que postou primeiro.
No primeiro você tinha duas tabelas, valores agregados de uma usando o max nos valores da segunda tabela, que fazia um join pela primary key, garantindo que todos os grupos tinham apenas um valor.

Nesse segundo exemplo, você quer agrupar por um campo (nome) e deixar que o banco de dados escolha sozinho um registro para acompanhar o valor agrupado (qual o critério pra mostrar os dados do pedro de 89 anos ou do pedro de 67?)
O mysql permite fazer isso, mas o resultado é bem mais difícil de prever.
Para fazer algo semelhante em outros bancos (acho que só o mysql aceita esse group by incompleto), você pode usar isso: http://sqlfiddle.com/#!15/9560e/2

Basicamente você precisa decidir qual estratégia usar para selecionar o resto dos dados, no exemplo está utilizando o registro com o menor id.


#24

O problema é o mesmo, só está mais simples de ver.
Se esse ultimo que mandei der certo, resolve todos os meus problemas.
Vou testar o que mandou.


#25

@AbelBueno , vc usou o MIN(), sendo assim posso usar o MAX() tbm, acho que essa é a unica forma.
Obrigado pela ajuda de todos.