Escolar Documentos
Profissional Documentos
Cultura Documentos
2. Qual a quantidade de pedidos aprovados por tipo de cliente (pessoa física e jurídica)?
Consulta no MySQL:
SELECT b.tipoCliente, COUNT(*)QtdPedido
FROM pedido a
JOIN cliente b ON a.codCliente = b.codCliente
WHERE a.status = "aprovado"
GROUP BY b.tipoCliente;
Resultado da Consulta no MySQL:
3. Quais os pedidos não têm nenhuma associação com venda (“itemComprado”)? Mostrar o código, o ano e
o status do pedido e também o nome e o tipo do cliente.
Consulta no MySQL:
SELECT a.codPedido, YEAR(a.data) Ano,
a.status, b.nome Cliente, b.tipoCliente
FROM pedido a
JOIN cliente b ON a.codCliente = b.codCliente
WHERE a.codPedido != ALL (
SELECT codPedido
FROM venda
);
Resultado da Consulta no MySQL:
Ou
// SOLUÇÃO DANILO AZEVEDO
db.pedido.aggregate([
{$match:{itemComprado:{$exists:false}}},
{$lookup:{
from:"cliente",
localField:"cliente_id",
foreignField: "_id",
as:"clientes"
}},
{$unwind:"$clientes"},
{$project:{
ano:{$year:"$data"},
status:1,
cliente:"$clientes.nome",
tipoCliente:"$clientes.tipoCliente"
}}
]).toArray();
Instituto Federal da Bahia – IFBA Página 6 de 19
Campus Vitória da Conquista
4. Qual o produto vendido que teve mais troca em 2016? Informar além do código e do nome do produto, a
quantidade de troca do produto.
Consulta no MySQL:
SELECT b.codProduto, b.nome, SUM(a.quantidade) QuantidadeTroca
FROM trocaproduto a
JOIN produto b on b.codProduto = a.codProdutoVenda
WHERE YEAR(a.dataTroca) = '2016'
GROUP BY a.codProdutoVenda
HAVING QuantidadeTroca >= ALL (
SELECT SUM(a.quantidade) qtd
FROM trocaproduto a
WHERE YEAR(a.dataTroca) = '2016'
GROUP BY a.codProdutoVenda
);
Resultado da Consulta no MySQL:
if(resultado.hasNext()){
var res = resultado.next();
db.pedido.aggregate([
{$unwind:"$itemComprado"},
{$project:{
ano:{$year:"$itemComprado.itemTrocado.dataTroca"},
"itemComprado.produto_id":1,
"itemComprado.itemTrocado.produto_id":1,
"itemComprado.itemTrocado.quantidade":1
}},
{$match:{ano:{$eq:2016}}},
{$group:{
_id:"$itemComprado.produto_id",
quantidadeTroca:{$sum:"$itemComprado.itemTrocado.quantidade"}
}},
{$match:{quantidadeTroca:{$eq:res.maximo}}},
{$lookup:{
from:"produto",
localField:"_id",
foreignField:"_id",
as:"produtos"
}},
{$unwind:"$produtos"},
{$project:{
"produtos.nome":1,
quantidadeTroca:1
}}
]);
}
Instituto Federal da Bahia – IFBA Página 8 de 19
Campus Vitória da Conquista
5. Qual o percentual de produto vendido foi trocado? Mostrar o percentual com somente duas casas
decimais. Utilizar o operador $trunc.
Consulta no MySQL:
SELECT TRUNCATE(QtdTroca/TotalVenda*100, 2) PercentualPedProdVendido
FROM (
SELECT COUNT(*) QtdTroca
FROM TrocaProduto
)T1,
(SELECT COUNT(*) TotalVenda
FROM Venda
)T2;
Resultado da Consulta no MySQL:
if(venda.hasNext()){
var v = venda.next().total;
db.pedido.aggregate([
{$unwind:"$itemComprado"},
{$match:{"itemComprado.itemTrocado":{$exists:true}}},
{$count: "total"},
{$project:{_id:0, d:{$divide:["$total", v]}}},
{$project:{m:{$multiply:["$d", 100]}}},
{$project:{res:{$trunc:["$m", 2]}}}
]);
}
Instituto Federal da Bahia – IFBA Página 9 de 19
Campus Vitória da Conquista
6. Quais produtos vendidos têm pelo menos uma troca? Informar o código e o nome do produto.
Consulta no MySQL:
SELECT codProduto, nome
FROM Produto
WHERE codProduto = ANY(
SELECT codProdutoVenda
FROM TrocaProduto
);
Resultado da Consulta no MySQL:
7. Quais produtos vendidos têm pelo menos duas trocas? Informar o código, o nome do produto e a
quantidade de troca.
Consulta no MySQL:
SELECT b.codProduto, b.nome, COUNT(*) QuantidadeTroca
FROM trocaproduto a
JOIN produto b on b.codProduto = a.codProdutoVenda
GROUP BY a.codProdutoVenda
HAVING QuantidadeTroca >=2;
Resultado da Consulta no MySQL:
Ou
db.pedido.aggregate([
{$unwind:"$itemComprado"},
{$match:{"itemComprado.itemTrocado":{$exists:true}}},
{$project:{
"itemComprado.produto_id":1,
"itemComprado.itemTrocado.produto_id":1,
"itemComprado.itemTrocado.quantidade":1
}},
{$group:{"_id":"$itemComprado.produto_id","total":{"$sum":NumberInt(1)}}},
{$match:{"total":{$gte:2}}},
{$lookup:{
from:"produto",
localField:"_id",
foreignField:"_id",
as:"produtos"
}},
{$unwind:"$produtos"},
{$project:{
_id:0,"produtos._id":1,
"produtos.nome":1, "produtos.quantidadeTroca":"$total"
}},
{$sort:{"produtos._id":1}}
]).toArray();
Instituto Federal da Bahia – IFBA Página 13 de 19
Campus Vitória da Conquista
Ou
// SOLUÇÃO MAURÍCIO
db.pedido.aggregate([
{$unwind:"$itemComprado"},
{$match:{"itemComprado.itemTrocado":{$exists:true}}},
{$group:{
"_id":"$itemComprado.produto_id",
"qtd":{"$sum":NumberInt(1)}
}},
{$redact:{
$cond:{
if:{$gte:["$qtd",2]},
then:"$$KEEP",
else:"$$PRUNE"
}
}},
{$lookup:{
from:"produto",
localField:"_id",
foreignField:"_id",
as:"produtos"
}},
{$unwind:"$produtos"},
{$set:{"produtos.quantidadeTroca":{$toInt:"$qtd"}}},
{$project:{
_id:0,"produtos._id":1,
"produtos.nome":1, "produtos.quantidadeTroca":1
}}
]);
Instituto Federal da Bahia – IFBA Página 14 de 19
Campus Vitória da Conquista
8. Qual é o produto mais vendido entre Fevereiro e Novembro de 2016? Informar além do código e do
nome do produto, a quantidade vendida.
Consulta no MySQL:
SELECT c.codProduto, c.nome, SUM(a.quantidade) qtdVendido
FROM Venda a
JOIN Pedido b ON a.codPedido = b.codPedido
JOIN Produto c ON c.codProduto = a.codProduto
WHERE MONTH(data) BETWEEN 2 AND 11 AND YEAR(data) = '2016'
GROUP BY a.codProduto
HAVING qtdVendido >= ALL(
SELECT SUM(a.quantidade)
FROM Venda a
JOIN Pedido b ON a.codPedido = b.codPedido
WHERE MONTH(data) BETWEEN 2 AND 11 AND YEAR(data) = '2016'
GROUP BY a.codProduto
);
Resultado da Consulta no MySQL:
if(resultado.hasNext()){
var res = resultado.next();
db.pedido.aggregate([
{$project:{
ano:{$year:"$data"},
mes:{$month:"$data"},
"itemComprado.produto_id":1,
"itemComprado.quantidade":1
}},
{$match:{$and:[{ano:{$eq:2016}}, {mes:{$gte:2, $lte:11}}]}},
{$unwind:"$itemComprado"},
{$group:{
_id:"$itemComprado.produto_id",
total:{$sum:"$itemComprado.quantidade"}
}},
{$match:{total:{$eq:res.maximo}}},
{$lookup:{
from:"produto",
localField:"_id",
foreignField:"_id",
as:"produtos"
}},
{$unwind:"$produtos"},
{$addFields:{"produtos.qtdVendido":"$total"}},
{$project:{
"produtos._id":1,
"produtos.nome":1,
"produtos.qtdVendido":1,
_id:0
}}
]);
}
Instituto Federal da Bahia – IFBA Página 16 de 19
Campus Vitória da Conquista
10. Qual o código do pedido, o código de rastreamento e o nome do cliente dos pedidos com status “negado”
entre os anos de 2014 e 2017? Mostrar “inexistente” para o código de rastreamento nulo ou inexistente.
Consulta no MySQL:
SELECT a.codPedido, a.codRastreamento, b.nome
FROM Pedido a
JOIN Cliente b ON b.codCliente = a.codCliente
WHERE status = 'negado' AND YEAR(data) BETWEEN 2014 AND 2017;
Resultado da Consulta no MySQL:
11. Qual cliente mais comprou produto entre 2016 e 2017? Informar o código e o nome do cliente, o tipo do
cliente (física ou jurídica) e a quantidade que comprou.
Consulta no MySQL:
SELECT a.codCliente, c.nome, c.tipoCliente,
SUM(b.quantidade)QtdPedidoComprado
FROM Pedido a
JOIN Venda b ON b.codPedido = a.codPedido
JOIN Cliente c ON c.codCliente = a.codCliente
WHERE a.status != 'negado' AND YEAR(a.data) BETWEEN 2016 AND 2017
GROUP BY a.codCliente
HAVING QtdPedidoComprado >= ALL (
SELECT SUM(b.quantidade) QtdPedidoComprado
FROM Pedido a
JOIN Venda b ON b.codPedido = a.codPedido
WHERE a.status != 'negado' AND YEAR(a.data) BETWEEN 2016 AND 2017
GROUP BY a.codCliente
);
Resultado da Consulta no MySQL: