Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

edulemos

funções agregadas

Recommended Posts

Preciso fazer uma query que retorne o nome

do cliente com maior movimentação, estou

fazendo assim

 

select pc.Nome, pc.DataNasc

from p_Cliente pc, p_Banco pb, p_Movimento pm

where pc.Id = pm.Cliente and

pb.Id = pm.Banco and

group by pc.Nome, pc.DataNasc

having max(avg(pm.Valor))

 

mas o sql não aceita funções agregadas : max(avg(pm.Valor))

 

alguem tem outra opçao ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha.. 2 coisas q n entendi:

1.

and

group by pc.Nome, pc.DataNasc

(and c/ group by??)

verifique isso..

 

2. qto a função, se você quer maior valor (max), pq o avg (valor medio)???

Compartilhar este post


Link para o post
Compartilhar em outros sites
Preciso fazer uma query que retorne o nome

do cliente com maior movimentação, estou

fazendo assim

 

Maior valor

 

select max(pm.Valor)
from p_Cliente pc, p_Banco pb, p_Movimento pm
where pc.Id = pm.Cliente and
pb.Id = pm.Banco 

 

Clientes com este valor

 

select pc.Nome, pc.DataNasc
from p_Cliente pc, p_Banco pb, p_Movimento pm
where pc.Id = pm.Cliente and
pb.Id = pm.Banco and
pm.Valor = (select max(pm.Valor)
           from p_Cliente pc, p_Banco pb, p_Movimento pm
           where pc.Id = pm.Cliente and
           pb.Id = pm.Banco)

Compartilhar este post


Link para o post
Compartilhar em outros sites

avg porque 1º tem que calcular a media do saldo de todos

clientes (coluna pm.Valor), depois tem que selecionar o

nome do cliente com a maior media, eis a questão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Médias

 

select pc.Id,max(avg(pm.Valor))
from p_Cliente pc, p_Banco pb, p_Movimento pm
where pc.Id = pm.Cliente and
pb.Id = pm.Banco 
group by pc.Id

 

Maior Média

 

 

select max(media)
from
(
select pc.Id,max(avg(pm.Valor)) media
from p_Cliente pc, p_Banco pb, p_Movimento pm
where pc.Id = pm.Cliente and
pb.Id = pm.Banco 
group by pc.Id
)

 

Quem tem isto ...

 

 

select pc.Nome, pc.DataNasc
from p_Cliente pc, p_Banco pb, p_Movimento pm
where pc.Id = pm.Cliente and
pb.Id = pm.Banco and
pm.Valor = (select max(media)
           from
           (
            select pc.Id,max(avg(pm.Valor)) media
            from p_Cliente pc, p_Banco pb, p_Movimento pm
            where pc.Id = pm.Cliente and
            pb.Id = pm.Banco 
            group by pc.Id
           ))

 

Devendo existir soluções melhores ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT TOP 1
pc.Nome ,
pc.DataNasc ,
AVG(pm.valor)
FROM p_Cliente pc ,
p_Banco pb ,
p_Movimento pm
WHERE pc.Id = pm.Cliente
AND pb.Id = pm.Banco
GROUP BY pc.Nome ,
pc.DataNasc
ORDER BY avg(pm.valor) DESC

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

:clap:

 

Como disse

devendo existir soluções melhores
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.