Página 1 de 1
Ajuda em aplicar Count e Max
Enviado: Dom, 20 Jan 2008 6:16 pm
por SepulRise
Boas.
Como é que se pode fazer uma query sem ser por vistas, por exemplo para dizer qual o cliente com maior numero de multas?
Ou o cliente que comprou mais um produto xpto?
É que sempre que tento aplicar um count e um max na query dá-me sempre erro.
Obrigado
Enviado: Dom, 20 Jan 2008 6:29 pm
por SepulRise
Selecionar tudo
select a.nome, c.nome_produto, count(b.QUANTIDADE_PRODUTO) as Quantidades
from cliente a, linha_compra b, produto c, compra d
where c.nome_produto= 'Farinha' and
c.id_produto = b.id_produto and
b.id_compra = d.id_compra and
a.id_cliente = d.ID_CLIENTE
group by a.nome, c.nome_produto
order by Quantidades desc;
esqueci de meter a query que tinha feito.
Enviado: Seg, 21 Jan 2008 7:12 am
por Trevisolli
Brother,
Posta pra gente aqui o erro que está ocorrendo.
Enviado: Seg, 21 Jan 2008 8:35 am
por gokden
qual é o erro qui retorna quando você executa esse select ??
Enviado: Seg, 21 Jan 2008 12:04 pm
por SepulRise
Desculpem eu expliquei-me mal.
A query não dá erro, mas eu queria retornar era o máximo que resulta dessa query. E não consigo fazer isso.
Obrigado e peço desculpa por não me ter explicado bem.
Enviado: Seg, 21 Jan 2008 12:09 pm
por Trevisolli
Brother, tranquilo?
Faz um teste ai, com este exemplo abaixo:
Qualquer coisa, manda aqui pra gente, beleza?
Enviado: Seg, 21 Jan 2008 12:23 pm
por SepulRise
Mas é possivel fazer isso na mesma query que indiquei em cima?
Enviado: Seg, 21 Jan 2008 12:42 pm
por Trevisolli
Brother,
Faz 1 teste ai (não tenho a tua modelagem.. se der algum erro, retorna aqui):
Selecionar tudo
SELECT a.nome,
c.nome_produto,
b.quantidade_produto AS quantidades
FROM cliente a,
linha_compra b,
produto c,
compra d
WHERE c.id_produto = b.id_produto
AND b.id_compra = d.id_compra
AND a.id_cliente = d.id_cliente
AND b.quantidade_produto = (SELECT MAX(quantidade_produto)
FROM produto
WHERE c.nome_produto = 'Farinha')
ORDER BY b.quantidade_produto DESC;
Enviado: Seg, 21 Jan 2008 12:54 pm
por SepulRise
O codigo funciona na perfeição. Obrigadão.
Mas tenho mais uma pequena duvida. É possivel nessa ultima query, fazer devolver só o primeiro resultado?
Ela devolve vários máximos por pessoa, mas como fazer para devolver o maior máximo?
Obrigado
Enviado: Seg, 21 Jan 2008 1:17 pm
por Trevisolli
Brother,
Este máximo por pessoa, é porquê N pessoas tem o mesmo valor máximo?
Caso positivo, trazer qual? Qualquer um deles?
Tem como postar o resultado da query (caso não seja muito grande) aqui?
Enviado: Seg, 21 Jan 2008 1:31 pm
por SepulRise
Ok vou postar o resultado da query.
Enviado: Seg, 21 Jan 2008 1:35 pm
por SepulRise
Agora nessa listagem que voces podem ver eu keria só seleccionar o primeiro resultado. Ou seja seleccionar o máximo dos máximos
Obrigado
Enviado: Seg, 21 Jan 2008 1:49 pm
por Trevisolli
Brother,
Não consegui visualizar a imagem.
Tem como mandar por e-mail?
Vou mandar meu e-mail na tua caixa de mensagens aqui do fórum.
Enviado: Seg, 21 Jan 2008 6:20 pm
por rogenaro
Pelo que entendi, você quer apenas a priemira linha de retorno da consulta
Selecionar tudo
select a.nome, c.nome_produto, count(b.QUANTIDADE_PRODUTO) as Quantidades
from cliente a, linha_compra b, produto c, compra d
where c.nome_produto= 'Farinha' and
c.id_produto = b.id_produto and
b.id_compra = d.id_compra and
a.id_cliente = d.ID_CLIENTE
group by a.nome, c.nome_produto
order by Quantidades desc;
, certo?
Se for isso mesmo, você poderia fazer o seguinte:
Selecionar tudo
select * from
(
select a.nome, c.nome_produto, count(b.QUANTIDADE_PRODUTO) as Quantidades
from cliente a, linha_compra b, produto c, compra d
where c.nome_produto= 'Farinha' and
c.id_produto = b.id_produto and
b.id_compra = d.id_compra and
a.id_cliente = d.ID_CLIENTE
group by a.nome, c.nome_produto
order by Quantidades desc
) where rownum < 2
Claro que, no caso acima, se houverem dois ou mais clientes com a mesma quantidade máxima, apenas um deles será retornado.
Para exibir todos os resultados, você poderia fazer:
Selecionar tudo
select nome, nome_produto, quantidade
from
(
select nome, nome_produto, quantidade, rank() over (order by quantidade desc) seq
from
(
select a.nome, c.nome_produto, count(b.QUANTIDADE_PRODUTO) as Quantidades
from cliente a, linha_compra b, produto c, compra d
where c.nome_produto= 'Farinha' and
c.id_produto = b.id_produto and
b.id_compra = d.id_compra and
a.id_cliente = d.ID_CLIENTE
group by a.nome, c.nome_produto
) where seq = 1
)
Enviado: Seg, 21 Jan 2008 8:36 pm
por SepulRise
No codigo
Selecionar tudo
select nome, nome_produto, quantidade
from
(
select nome, nome_produto, quantidade, rank() over (order by quantidade desc) seq
from
(
select a.nome, c.nome_produto, count(b.QUANTIDADE_PRODUTO) as Quantidades
from cliente a, linha_compra b, produto c, compra d
where c.nome_produto= 'Farinha' and
c.id_produto = b.id_produto and
b.id_compra = d.id_compra and
a.id_cliente = d.ID_CLIENTE
group by a.nome, c.nome_produto
) where seq = 1
)
da-me o seguinte erro: ) where seq = 1
*
ERRO na linha 14:
ORA-00904: "SEQ": identificador inválido
Enviado: Ter, 22 Jan 2008 7:40 am
por Tineks
E ai SepulRise, beleza??
nesse consulta você precisa fazer 2 ajustes, um deles é referente ao nome que você deu pra coluna onde você usa o count, nesse caso você deu o nome "Quantidades", porem no ponto onde você usa o Rank você usa o nome "Quantidade".
O segundo ponto é o local onde você colocou o seq, você deixou ele junto com o select do rank, mas nesse caso você precisa colocar ele no where do nivel acima..
segue aqui o select pronto.. tenta rodar ele, qualquer coisa é só falar.
Selecionar tudo
SELECT nome, nome_produto, quantidade
FROM (SELECT nome, nome_produto, quantidade,
RANK () OVER (ORDER BY quantidades DESC) seq
FROM (SELECT a.nome, c.nome_produto,
COUNT (b.quantidade_produto) AS quantidades
FROM cliente a, linha_compra b, produto c, compra d
WHERE c.nome_produto = 'Farinha'
AND c.id_produto = b.id_produto
AND b.id_compra = d.id_compra
AND a.id_cliente = d.id_cliente
GROUP BY a.nome, c.nome_produto
)
)
WHERE seq = 1
[]'s
Enviado: Ter, 22 Jan 2008 9:11 am
por SepulRise
Beleza.
Esta ultima query funcionou. Valeu cara.
Obrigado pela ajuda ppl.
Abraços...
Enviado: Ter, 22 Jan 2008 5:37 pm
por rogenaro
nesse consulta você precisa fazer 2 ajustes, um deles é referente ao nome que você deu pra coluna onde você usa o count, nesse caso você deu o nome "Quantidades", porem no ponto onde você usa o Rank você usa o nome "Quantidade".
O segundo ponto é o local onde você colocou o seq, você deixou ele junto com o select do rank, mas nesse caso você precisa colocar ele no where do nivel acima..
segue aqui o select pronto.. tenta rodar ele, qualquer coisa é só falar.
Ops.. falha minha...
Valeu por corrigir a query, Tineks.[/quote]
Enviado: Qua, 23 Jan 2008 7:23 am
por Tineks
Opa, tranquilo Rafael!!
uma coisa ou outra as vezes passa sem agente perceber.... rsrs..
abraços!!!!