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
Ajuda em aplicar Count e Max
-
- Rank: Programador Júnior
- Mensagens: 19
- Registrado em: Dom, 20 Jan 2008 6:11 pm
- Localização: Portugal
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;
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Posta pra gente aqui o erro que está ocorrendo.
Posta pra gente aqui o erro que está ocorrendo.
-
- Rank: Programador Júnior
- Mensagens: 19
- Registrado em: Dom, 20 Jan 2008 6:11 pm
- Localização: Portugal
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.
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.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother, tranquilo?
Faz um teste ai, com este exemplo abaixo:
Qualquer coisa, manda aqui pra gente, beleza?
Faz um teste ai, com este exemplo abaixo:
SELECT MAX(b.QUANTIDADE_PRODUTO)
FROM produto b;
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Faz 1 teste ai (não tenho a tua modelagem.. se der algum erro, retorna aqui):
Faz 1 teste ai (não tenho a tua modelagem.. se der algum erro, retorna aqui):
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;
-
- Rank: Programador Júnior
- Mensagens: 19
- Registrado em: Dom, 20 Jan 2008 6:11 pm
- Localização: Portugal
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
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
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
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?
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?
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
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.
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.
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Pelo que entendi, você quer apenas a priemira linha de retorno da consulta
, certo?
Se for isso mesmo, você poderia fazer o seguinte:
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:
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:
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
Para exibir todos os resultados, você poderia fazer:
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
)
-
- Rank: Programador Júnior
- Mensagens: 19
- Registrado em: Dom, 20 Jan 2008 6:11 pm
- Localização: Portugal
No codigo
da-me o seguinte erro: ) where seq = 1
*
ERRO na linha 14:
ORA-00904: "SEQ": identificador inválido
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
)
*
ERRO na linha 14:
ORA-00904: "SEQ": identificador inválido
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
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.
[]'s
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.
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
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Ops.. falha minha...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.
Valeu por corrigir a query, Tineks.[/quote]
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes