Ir para o conteúdo
alves077

[Dúvida] Comandos Sql

Mensagens Recomendadas

alves077

Bom dia,

Tenho aqui umas tabelas onde queria fazer umas consultas, mas nao estou a conseguir chegar ao resultado pretendido, as tabelas são as seguintas:

Produto( id_produto:INT, nome:VARCHAR(40) NN, tipo:VARCHAR(10), preco_atual:NUMERIC(5,2) NN, unidades_vendidas:NUMERIC(7) NN)

Cliente( id_cliente:INT, nome:VARCHAR(45), NIF:NUMERIC(9), morada:VARCHAR(45), codigo_postal:CHAR(8),cidade:VARCHAR(45))

Venda(id_venda:INT, data:DATE NN, tipo_pagamento:CHAR NN, id_cliente:int (fk))

Item(id_produto:INT (fk),id_venda:INT (fk),quantidade:NUMERIC(2) NN,preco_unitario:NUMERIC(5,2) NN,
desconto:NUMERIC(2))

Sendo os id's primary key.

E queria obter o nome do produto que mais unidades vendeu em 2012 e a quantidade vendida. Conseguem dar uma ideia como la chegar? Já fiz umas tentativas mas sem sucesso.

Obrigado pela atenção,

alves077

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Primeiro passo

select produto.nome, sum(item.quantidade)
from ...
where ...
group by produto.nome

Segundo passo

Preciso de que tabelas?

select Produto.nome, sum(Item.quantidade)
from Produto, Venda, Item
where ...
group by produto.nome

Terceiro passo

Como se ligam as tabelas?

select Produto.nome, sum(Item.quantidade)
from Produto, Venda, Item
where Produto.id_produto = Item.id_produto and Item.id_venda = Venda.id_venda
group by produto.nome

Quarto passo

Limitar o resultado para o ano de 2012

select Produto.nome, sum(Item.quantidade)
from Produto, Venda, Item
where Produto.id_produto = Item.id_produto and Item.id_venda = Venda.id_venda
 and year(Venda.data) = 2012 -- nao sei se isto funciona em Oracle!
group by produto.nome


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Ok, obrigado pela explicação, mas esse select selecciona o produto que vendeu mais? Ou relaciona somente os produtos vendidos em 2012, mostrando a soma dos produtos vendido em 2012 produto a produto?

Não terei que usar uma sub-consulta para saber qual foi que vendeu mais, ou basta usar a função max no where, mas não sei se posso fazer.

Obrigado pela ajuda,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

... esse select selecciona o produto que vendeu mais?

Ah! Esqueci-me dessa parte.

Se ordenares, por ordem decrescente, a segunda coluna, tens em primeiro lugar o produto que vendeu mais.

Como seleccionar so um registo no Oracle, nao sei ...

-- MSSQL
SELECT TOP 1 Produto.nome, SUM(Item.quantidade)
FROM Produto, Venda, Item
WHERE Produto.id_produto = Item.id_produto AND Item.id_venda = Venda.id_venda
 AND YEAR(Venda.DATA) = 2012 -- nao sei se isto funciona em Oracle!
GROUP BY produto.nome
order by sum(item.quantidade) desc

-- MySQL
SELECT Produto.nome, SUM(Item.quantidade)
FROM Produto, Venda, Item
WHERE Produto.id_produto = Item.id_produto AND Item.id_venda = Venda.id_venda
 AND YEAR(Venda.DATA) = 2012 -- nao sei se isto funciona em Oracle!
GROUP BY produto.nome
order by sum(item.quantidade) desc
limit 1

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Ok, obrigado.

Se puderes ajudar só mais num exercício com as mesmas tabelas agradecia:

Calcular o desconto total oferecido em cada produto em 2012, isto é, a quantia total descontada em todas as unidades vendidas de cada produto ao longo do ano de 2012. Apresentar também o total ganho em vendas e ordenar o resultado final por desconto total.

Estava a fazer este com um sub consulta, mas sem sucesso...

Obrigado pela atenção,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Estava a fazer este com um sub consulta, mas sem sucesso...

Mostra o que fizeste


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Select produto.nome, sum((item.desconto/100)*item.preco_unitario) "Desconto Total",  sum( item.preco_unitario-((item.desconto/100)*item.preco_unitario)) "Total despendido"
From produto, item, venda
Where produto.id_produto=item.id_produto AND item.id_venda=venda.id_venda AND YEAR(venda.data) = 2012

Esquece a parte da sub consulta, tentei fazer de outra maneira, não sei se esta muito legível e acho que está mal, a logica calculo com o sum o desconto de cada produto de 2012, e o total despendido calculo o preço a pagar - o desconto..

Obrigado pela atenção,

alves077

Editado por alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Se tens colunas simples e colunas com SUM()s, tens que agrupar os resultados!

select ... sum() ...
...
group by ...


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Não sei se faço bom uso do group by, mas penso ser +/- ist

Select produto.nome, sum((item.desconto/100)*item.preco_unitario) "Desconto Total",  sum( item.preco_unitario-((item.desconto/100)*item.preco_unitario)) "Total despendido"
From produto, item, venda
Where produto.id_produto=item.id_produto AND item.id_venda=venda.id_venda 
Group by produto.nome
having  YEAR(venda.data) = 2012

Obrigado pela atenção,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ZexAlex

se a coluna venda.DATA é do tipo DATE penso que o HAVING YEAR(venda.DATA) = 2012 poderá ser apenas maisuma cláusula de where: AND to_char(venda.DATA,'YYYY') = '2012' e o limit pode ser também mais uma cláusula de where: AND rownum = 1"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.