alves077 Posted February 3, 2013 at 11:13 AM Report #494028 Posted February 3, 2013 at 11:13 AM (edited) 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 Edited February 4, 2013 at 10:37 AM by apocsantos geshi
pmg Posted February 3, 2013 at 11:25 AM Report #494029 Posted February 3, 2013 at 11:25 AM 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!
alves077 Posted February 3, 2013 at 03:25 PM Author Report #494048 Posted February 3, 2013 at 03:25 PM 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
pmg Posted February 3, 2013 at 03:37 PM Report #494050 Posted February 3, 2013 at 03:37 PM (edited) ... 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 Edited February 3, 2013 at 03:42 PM by 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!
alves077 Posted February 3, 2013 at 03:53 PM Author Report #494052 Posted February 3, 2013 at 03:53 PM 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
pmg Posted February 3, 2013 at 04:19 PM Report #494054 Posted February 3, 2013 at 04:19 PM 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!
alves077 Posted February 3, 2013 at 04:45 PM Author Report #494055 Posted February 3, 2013 at 04:45 PM (edited) 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 Edited February 3, 2013 at 05:17 PM by alves077
pmg Posted February 4, 2013 at 10:29 AM Report #494129 Posted February 4, 2013 at 10:29 AM 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!
alves077 Posted February 4, 2013 at 11:33 AM Author Report #494133 Posted February 4, 2013 at 11:33 AM 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
jsWizard Posted February 25, 2013 at 12:06 PM Report #496936 Posted February 25, 2013 at 12:06 PM parece-me que anda aqui código MySQL no forum Oracle 😄 TOP 1 .. LIMIT ... hummm
ZexAlex Posted May 8, 2013 at 05:19 PM Report #506296 Posted May 8, 2013 at 05:19 PM 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"
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now