Jump to content
  • 0
Priscila1307

PRODUTOS com a maior quantidade de PEDIDOS

Question

CREATE TABLE CLIENTE( 
 Idcliente int, 
 nome varchar(60), 
 dtnascimento date, 
 cpf varchar(11), 
 CONSTRAINT pk_cliente PRIMARY KEY (Idcliente) 
);

CREATE TABLE PEDIDO( 
 Idpedido int, 
 Idcliente int, 
 datapedido date,  
 vltotal decimal(10,2), 
 CONSTRAINT pk_pedido PRIMARY KEY (Idpedido), 
 CONSTRAINT fk_pedido_cliente FOREIGN KEY (Idcliente) REFERENCES CLIENTE(Idcliente) 
);

CREATE TABLE PRODUTO( 
 Idproduto int, 
 descricao varchar(100), 
 quantidade int, 
 CONSTRAINT pk_produto PRIMARY KEY (Idproduto) 
);

CREATE TABLE ITEMPEDIDO( 
 Idpedido int, 
 Nritem int, 
 valor decimal(10,2), 
 quantidade int, 
 Idproduto int, 
 CONSTRAINT pk_itempedido PRIMARY KEY (Idpedido, Nritem), 
 CONSTRAINT fk_Idpedido FOREIGN KEY (Idpedido) REFERENCES PEDIDO (Idpedido), 
 CONSTRAINT fk_itempedido_produto FOREIGN KEY (Idproduto) REFERENCES PRODUTO (Idproduto) 
);

CREATE TABLE LOG( 
 Idlog int, 
 data date, 
 descricao varchar(255), 
 CONSTRAINT pk_log PRIMARY KEY (Idlog) 
);

INSERT INTO CLIENTE VALUES (1, 'Hugo Batista', TO_DATE('05/02/1990', 'DD/MM/YYYY'), 
'51898608253');

INSERT INTO CLIENTE VALUES (2, 'José Antonio', TO_DATE('02/05/1985', 'DD/MM/YYYY'), 
'51144722241');

INSERT INTO CLIENTE VALUES (3, 'João Carlos', TO_DATE('03/05/1993', 'DD/MM/YYYY'), 
'84882273292');

INSERT INTO CLIENTE VALUES (4, 'Edivaldo Santana', TO_DATE('01/06/2000', 'DD/MM/YYYY'), 
'30609426176');

INSERT INTO CLIENTE VALUES (5, 'Cristina Oliveira', TO_DATE('16/08/1999', 'DD/MM/YYYY'), 
'56313586700');

INSERT INTO CLIENTE VALUES (6, 'Artur da Silva', TO_DATE('06/05/2001', 'DD/MM/YYYY'), 
'67491246583');

INSERT INTO CLIENTE VALUES (7, 'Adrina Domingues', TO_DATE('01/02/1972', 'DD/MM/YYYY'), 
'22044617250');

INSERT INTO PRODUTO VALUES (1, 'SAMSUNG J7 - PRIME', 10);

INSERT INTO PRODUTO VALUES (2, 'SAMSUNG J5 - PRIME', 10);

INSERT INTO PRODUTO VALUES (3, 'IPHONE X', 10);

INSERT INTO PRODUTO VALUES (4, 'MOTO G 5S', 10);

INSERT INTO PRODUTO VALUES (5, 'IPHONE 6S', 10);

INSERT INTO PEDIDO VALUES (1, 4, TO_DATE('10/03/2018', 'DD/MM/YYYY'), 1400.99);

INSERT INTO ITEMPEDIDO VALUES (1, 1, 800.99, 1, 1);

INSERT INTO ITEMPEDIDO VALUES (1, 2, 600.00, 1, 2);

INSERT INTO PEDIDO VALUES (2, 2, TO_DATE('17/03/2018', 'DD/MM/YYYY'), 1349.50);

INSERT INTO ITEMPEDIDO VALUES (2, 1, 749.50, 1, 4);

INSERT INTO ITEMPEDIDO VALUES (2, 2, 600.00, 1, 2);

INSERT INTO PEDIDO VALUES (3, 1, TO_DATE('20/03/2018', 'DD/MM/YYYY'), 2590.10);

INSERT INTO ITEMPEDIDO VALUES (3, 1, 1800.71, 1, 5);

INSERT INTO ITEMPEDIDO VALUES (3, 2, 789.39, 1, 4);

INSERT INTO PEDIDO VALUES (4, 5, TO_DATE('21/03/2018', 'DD/MM/YYYY'), 2590.10);

INSERT INTO ITEMPEDIDO VALUES (4, 1, 5099.00, 1, 3);

INSERT INTO PEDIDO VALUES (5, 7, TO_DATE('10/03/2018', 'DD/MM/YYYY'), 1800.00);

INSERT INTO ITEMPEDIDO VALUES (5, 1, 600.00, 3, 2);

"Crie um select que exibe quais são os três PRODUTOS com a maior quantidade de PEDIDOS. Exiba o nome e o código do produto"

 

Oi pessoal. por favor preciso da ajuda de vocês . 

Eu queria criar um SELECT que exiba os três PRODUTOS com a maior quantidade de PEDIDOS.
Retornando nome do produto ( PRODUTO.DESCRICAO )  e  o código dele ( PRODUTO.IDPRODUTO )

 

Eu tentei das seguintes formas mas não consegui . estou novinha ainda em oracle

 

 

SELECT PRODUTO.DESCRICAO, PRODUTO.IDPRODUTO, ITEMPEDIDO.QUANTIDADE
FROM ITEMPEDIDO, PEDIDO, PRODUTO
WHERE ITEMPEDIDO.IDPEDIDO = PEDIDO.IDPEDIDO
AND PRODUTO.IDPRODUTO = ITEMPEDIDO.IDPRODUTO
GROUP BY IDPRODUTO

 

neste código só roda sem erro se eu tirar o GROUP BY IDPRODUTO.  Mas não gera o resultado esperado :dissapointed_relieved:

853287518_411Aug_3117_16.png.e83d1688dd4b00720c13b2811fb28bb9.png

 

SELECT ITEMPEDIDO.IDPRODUTO, COUNT(*) AS VENDIDO
FROM ITEMPEDIDO
GROUP BY IDPRODUTO
ORDER BY VENDIDO DESC

 

 

Aqui eu até consegui chegar perto mas não consegui acrescentar o nome do produto ( que é PRODUTO.DESCRICAO) e o produto com idproduto 2 ( que é o J5 ) não são só 3 vendidos. SÃO 5 !!! ai ai ai ai

 

....e apos muita batalha eu consegui fazer isso ... que tbm ainda não é o ideal

 

SELECT * FROM (SELECT ITEMPEDIDO.IDPRODUTO, COUNT(*) AS VENDIDO
FROM ITEMPEDIDO
GROUP BY IDPRODUTO
ORDER BY VENDIDO DESC)
WHERE ROWNUM <4

 

1077575288_412Aug_3117_18.png.6543c8ff67f6f82a491781355db5f978.png

 

... demorei horrores pra fazer esse WHERE ROWNUM <4  rodar sem erro... pois é pessoal. só historia triste ! kkkkk:joy:

 

 

Agora estou tentando esse aqui mas não terminei 

 

SELECT PRODUTO.DESCRICAO AS NOME, ITEMPEDIDO.IDPRODUTO
FROM PRODUTO, ITEMPEDIDO
WHERE PRODUTO.IDPRODUTO = ITEMPEDIDO.IDPRODUTO

742200536_413Aug_3117_19.png.49ca02da59c0b892fa13205948b8e9e1.png

 

 

acabei parando no meio do caminho e decidi recorrer ao imasters ! 

 

vou continuar tentando ... sera que consigo antes de alguem aparecer aqui ? rsrsrs

 

obrigada ! boa sorte pessoal.

 

 

 

ah ! já ia esquecendo estou usando o livesql.oracle.com

 

e vou deixar aqui tbm a consulta das tabelas 

 

 

448911346_410Aug_3102_23.png.4f936e75f7309694cfa33dcd924b2f6c.png1581180063_409Aug_3102_23.png.3216b4a2d70f5180d2812bfb3c46502f.png2043533730_408Aug_3102_22.png.58bec7d9cc955741a2a26639289ef9b1.png972256885_403Aug_3102_20.png.22dccf82c03a9bac2ccc0fc81c1cdb79.png

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

olá. se entendi bem,
tente o seguinte:

select PRODUTO.DESCRICAO, PRODUTO.IDPRODUTO,
sum(itempedido.quantidade) total
FROM ITEMPEDIDO, PRODUTO
where produto.Idproduto=itempedido.Idproduto
GROUP BY Itempedido.IDPRODUTO
order by total desc
WHERE ROWNUM <4

 

Share this post


Link to post
Share on other sites
  • 0
Em 02/09/2021 at 14:11, Fernando C disse:

olá. se entendi bem,
tente o seguinte:


select PRODUTO.DESCRICAO, PRODUTO.IDPRODUTO,
sum(itempedido.quantidade) total
FROM ITEMPEDIDO, PRODUTO
where produto.Idproduto=itempedido.Idproduto
GROUP BY Itempedido.IDPRODUTO
order by total desc
WHERE ROWNUM <4

 

 

Oi Fernando C. Boa Noite ! Obrigado por se disponibilizar a ajudar!

Eu rodei seu código e deu isso aqui ....

 

754818932_421Sep_0518_45.png.bed500e76b372479f0184b235bc8f60d.png

 

 

Share this post


Link to post
Share on other sites
  • 0

Oi. desculpe a demora. esqueci de finalizar o comando com um ponto e virgula (;).

a ultima linha ficaria assim, portanto:

WHERE ROWNUM <4;

tente ai e qqer coisa retorne.

Share this post


Link to post
Share on other sites
  • 0

Oi Fernando , bom dia . primeiramente gostaria de agradecer pela ajuda !

image.png.45cb9bd116a08a6608d6a3a3e411e6a2.png

 

Mew esse ROWNUM me dá maior trabalho pra rodar . preciso colocar select dentro de select para que ele funcione e isso ainda me deixa meio confusa . 

 

Igual aqui amigo

 

image.png.75ed212bf0ab33c979931c1647653955.png

 

 

Sera que se a gente fizer isso com codigo que você fez dara certo ?
vou tentar aqui ok ?

Share this post


Link to post
Share on other sites
  • 0

 

Veja se dará certo

 

select * from (select PRODUTO.descricao, PRODUTO.Idproduto, sum(ITEMPEDIDO.quantidade) total
FROM ITEMPEDIDO, PRODUTO
WHERE PRODUTO.Idproduto=ITEMPEDIDO.Idproduto
GROUP BY ITEMPEDIDO.Idproduto
ORDER BY total DESC) WHERE ROWNUM <= 4;

 

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By dfoliveira82
      Bom dia senhores,
       
      sou novo no Oracle, antes trabalhava com SQL SERVER, e me deparei com algo que ja estou a horas tentando solucionar mas nao consegui.
      Nessa Trigger que vou postar, quando mando compilar ela, fala que esta faltando uma virgula, apos o values, mas nao precisa dela e nao acho onde pode ser essa virgula faltante.
      CREATE OR REPLACE TRIGGER JOBS_CL_INSERE_USUARIO AFTER INSERT OR UPDATE OF EXPORTADA_AVA ON SITE_USUARIOS REFERENCING NEW AS NEW BEGIN INSERT INTO BLACKBEAN.TBL_USERS VALUES (NULL, 'INSERT', NULL, 'db', '0', '0', '0', TO_CHAR(:NEW.CPF), MD5(:NEW.CPF||'port@l'), TO_CHAR(:NEW.CPF), SUBSTRING(:NEW.NOME, 1, INSTR(:NEW.NOME, ' ')-1), SUBSTRING(:NEW.NOME, INSTR(:NEW.NOME, ' ')+1, LEN(:NEW.NOME)), 'email@email.com', NULL, NULL, DATE_TO_UNIX_TS(SYSDATE), NULL, NULL); END; / Se alguem puder me ajudar agradeceria.
    • By Carlos Antoliv
      Senhores, bom dia.
       
      tenho um campo status. Então, a ideia é mudar o status. Consigo alterar o status quando necessário. Daí, pensei em todas vez que alterar, salvar o id do usuário, data, hora, o último status alterado...
      consigo fazer isso com INSERT, depois do UPDATE.
       
      Nao uso trigger. Até tentei fazer, mas não saiu como eu queria.
       
      Então, para os maiores entendedores do assunto, a melhor prática seria a TRIGGER ou INSERT ? Melhor prática ou o que mais funciona na prática ?
       
      Alguém poderia dissertar sobre isso ?
      Vlw..abço
    • By asacap1000
      Olá galera estou quebrando a cabeça aqui e não sei mais o que fazer. Estamos migrando nossa intranet que estava desatualizada demais e estamos colocando toda ela em php7.3.
      Dentro desse sistema temos varias consultas que são realizadas no Oracle. As consultas estão ocorrendo 100% mas ao chegar na plataforma de relatórios travou tudo. Não consegui acertar o meio de consultar por período, já utilizei "to_date, to_char, trunc" e nada. Interessante que no PLSQL o to_date funciona certo
      SELECT DISTINCT TO_DATE(IO.TIME_ARRIVAL)
        FROM IN_OUT IO
       WHERE TO_DATE(IO.TIME_ARRIVAL) BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    04/11/2021
      2    18/11/2021
      3    17/11/2021
      4    14/11/2021
      5    22/11/2021
      6    08/11/2021
      7    11/11/2021
      8    13/11/2021
      9    09/11/2021
      10    10/11/2021
      11    05/11/2021
      12    19/11/2021
      13    15/11/2021
      14    03/11/2021
      15    06/11/2021
      16    23/11/2021
      17    01/11/2021
      18    02/11/2021
      19    16/11/2021
      20    20/11/2021
      21    12/11/2021
      22    21/11/2021
       
      Se eu utilizar ele ignora a data que estabeleci para a consulta
       TO_CHAR(IO.TIME_ARRIVAL,'DD/MM/YYYY') BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    03/07/2013
      2    05/07/2013
      3    18/06/2013
      4    21/05/2013
      5    20/05/2013
      6    12/08/2013
      7    21/08/2013
      8    23/08/2013
      9    02/09/2013
      10    12/09/2013
       
      Isso no PLSQL, no caso do PHP o to_date não funciona nem gera o relatório, e no to_char funciona mas ignorando as datas apontadas.
       
      O que dá pra  fazer pra resolver isso, tenho que finalizar essa migração até final de Dezembro e estou começando a ficar preocupado com o tempo
       
      Agradeço qualquer ajuda que vier
    • By Roberto S. Santos
      Boa noite devs.
      Poderiam me ajudar ?
      Estou querendo fazer o seguinte em um formulário PHP...
      O usuário deve cadastrar a sua data e horário do uso na churrasqueira e quando chegar nesta data e no horário final ele apaga os dados do cadastro desta reserva.
      Como posso fazer isto com PHP ?
      Temos...
      data reserva
      hora reserva  (hora inicial)
      hora final (já vai estar pré definida na base de dados)
      Banco de Dados : clientes
      Tabela : reserva
      Deus abençoe a todos.
       
    • By ldblucas
      Boa tarde,
       
      Atualmente qual a melhor formar de fazer um conexao C# com o banco Oracle ?
       
       
       
      desde já agradeço
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.