AJUDA (SQL) - Queries de consulta entre tabelas

SQL

MySQL

PostgreSQL

Banco de Dados

12/10/2019

Sou iniciante em SQL e preciso de ajuda em um exercício. Usando 3 tabeles de referência, uma de clientes, uma de produtos e uma de pedidos. Estou tentando desenvolver queries que respondam as seguintes questões:

1. Qual o ticket médio de cada produto?
2. Qual o ticket médio de cada cliente?
3. Quais clientes tem somente o produto XYZ?
4. Qual produto é o mais contratado na segunda compra do cliente?

Abaixo segue o script usado para as tabelas:

CREATE TABLE Clientes (
id int,
nome varchar(40)
)

CREATE TABLE Produtos (
id int,
descricao varchar(20)
)

CREATE TABLE Pedidos (
id int,
cliente id int,
produto id int,
valor_mensal int,
data_inicio date,
data_fim date
)

INSERT INTO Clientes (id, nome) VALUES (1, 'Maria');
INSERT INTO Clientes (id, nome) VALUES (2, 'João');
INSERT INTO Clientes (id, nome) VALUES (3, 'Pedro');
INSERT INTO Clientes (id, nome) VALUES (4, 'Rita');
INSERT INTO Clientes (id, nome) VALUES (5, Antonio');

INSERT INTO Produtos (id, descricao) VALUES (1, 'ABC');
INSERT INTO Produtos (id, descricao) VALUES (2, 'OPQ');
INSERT INTO Produtos (id, descricao) VALUES (3, 'XYZ');

INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (1, 1, 1, 50, 2/10/2017);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (2, 2, 2, 29, 3/15/2017);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio, data_fim) VALUES (1, 1, 1, 50, 8/22/2016, 2/17/2017);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (4, 2, 3, 250, 2/10/2017);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (5, 2, 1, 50, 5/15/2015);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (6, 3, 1, 250, 5/1/2018);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (7, 3, 2, 59, 2/28/2018);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (8, 4, 2, 29, 11/8/2015);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (9, 4, 2, 35, 6/5/2016);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (10, 4, 2, 49, 6/7/2016);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio, data_fim) VALUES (1, 1, 1, 50, 9/9/2016, 1/1/2018);
INSERT INTO Pedidos (id, cliente_id, produto_id, valor mensal, data_inicio) VALUES (12, 5, 3, 600, 9/15/2016);
João Martins

João Martins

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

12/10/2019

1. Qual o ticket médio de cada produto?
select p.produto_id, pr.descricao, avg(p.valor_mensal) media
from pedidos p
left join produtos pr on pr.id = p.produto_id
group by p.produto_id, pr.descricao

2. Qual o ticket médio de cada cliente?
select p.cliente_id, c.nome, avg(p.valor_mensal) media
from pedidos p
left join clientes c on c.id = p.cliente_id
group by p.cliente_id, c.nome

3. Quais clientes tem somente o produto XYZ?
select p.cliente_id, c.nome
from pedidos p
inner join clientes c on c.id = p.cliente_id
inner join produtos pr on pr.id = p.produto_id and pr.descricao = 'XYZ'
left join produtos pr2 on pr2.id = p.produto_id and pr2.descricao <> 'XYZ'
where pr2.descricao is null
group by p.cliente_id, c.nome
GOSTEI 0
POSTAR