0% acharam este documento útil (0 voto)
13 visualizações6 páginas

Exercicios SQL

O documento contém uma série de consultas SQL que extraem e analisam dados de um banco de dados de clientes, pedidos, produtos e categorias. As consultas abordam aspectos como quantidade de pedidos, faturamento, ticket médio, status de pagamento e cancelamento, entre outros. Além disso, são realizadas agregações e filtragens para obter insights sobre vendas e comportamento de clientes.

Enviado por

pheshood
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
13 visualizações6 páginas

Exercicios SQL

O documento contém uma série de consultas SQL que extraem e analisam dados de um banco de dados de clientes, pedidos, produtos e categorias. As consultas abordam aspectos como quantidade de pedidos, faturamento, ticket médio, status de pagamento e cancelamento, entre outros. Além disso, são realizadas agregações e filtragens para obter insights sobre vendas e comportamento de clientes.

Enviado por

pheshood
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

1)​ SELECT

c.id_cliente,
[Link],
[Link],
COUNT(p.id_pedido) AS quantidade_pedidos
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente = p.id_cliente
GROUP BY c.id_cliente, [Link], [Link]
ORDER BY quantidade_pedidos DESC;

2)​ SELECT
YEAR(p.data_pedido) AS ano,
MONTH(p.data_pedido) AS mes,
SUM(([Link] * ip.preco_unitario - ip.desconto_item) + [Link] - [Link]) AS
total_faturado
FROM pedidos p
JOIN itens_pedido ip
ON p.id_pedido = ip.id_pedido
WHERE [Link] IN ('PAGO','ENVIADO','CONCLUIDO')
GROUP BY ano, mes
ORDER BY ano, mes;

3)​ SELECT
[Link],
[Link],
SUM([Link]) AS qtd_total
FROM itens_pedido ip
JOIN pedidos p
ON ip.id_pedido = p.id_pedido
JOIN produtos pr
ON ip.id_produto = pr.id_produto
WHERE [Link] <> 'CANCELADO'
GROUP BY pr.id_produto, [Link], [Link]
ORDER BY qtd_total DESC
LIMIT 10;

4)​ SELECT
c.id_cliente,
[Link],
AVG(subtotal + [Link] - [Link]) AS ticket_medio
FROM clientes c
JOIN pedidos p
ON c.id_cliente = p.id_cliente
JOIN (
SELECT
id_pedido,
SUM(quantidade * preco_unitario - desconto_item) AS subtotal
FROM itens_pedido
GROUP BY id_pedido
) s ON p.id_pedido = s.id_pedido
WHERE [Link] = 'CONCLUIDO'
GROUP BY c.id_cliente, [Link]
HAVING COUNT(p.id_pedido) >= 3
AND ticket_medio > 200;

5)​ SELECT
[Link],
[Link] AS categoria,
IFNULL([Link],0) AS quantidade
FROM produtos p
JOIN categorias c
ON p.id_categoria = c.id_categoria
LEFT JOIN estoque e
ON p.id_produto = e.id_produto
WHERE [Link] = 1
AND ([Link] = 0 OR [Link] IS NULL)
ORDER BY [Link];

6)​ SELECT
p.id_pedido,
p.data_pedido,
[Link],
[Link],
[Link] AS status_pagamento,
[Link] AS valor_pagamento
FROM pedidos p
LEFT JOIN pagamentos pg
ON p.id_pedido = pg.id_pedido;

7)​ SELECT
transportadora,
AVG(DATEDIFF(entregue_em, enviado_em)) AS media_dias_entrega
FROM envios
WHERE status = 'ENTREGUE'
GROUP BY transportadora;

8)​ SELECT
estado,
COUNT(*) AS total_clientes
FROM enderecos
WHERE principal = 1
GROUP BY estado
ORDER BY total_clientes DESC;

9)​ SELECT
p.id_pedido,
ROUND(([Link] + SUM(ip.desconto_item)) /
(SUM([Link] * ip.preco_unitario - ip.desconto_item) + [Link]) * 100,2)
AS percentual_desconto
FROM pedidos p
JOIN itens_pedido ip
ON p.id_pedido = ip.id_pedido
GROUP BY p.id_pedido
HAVING SUM([Link] * ip.preco_unitario - ip.desconto_item) > 0
ORDER BY percentual_desconto DESC
LIMIT 20;

10)​SELECT
[Link],
[Link],
[Link] AS categoria
FROM produtos p
JOIN categorias c
ON p.id_categoria = c.id_categoria
WHERE LOWER([Link]) LIKE '%pro%';

11)​SELECT
p.id_pedido,
p.data_pedido
FROM pedidos p
LEFT JOIN envios e
ON p.id_pedido = e.id_pedido
WHERE [Link] = 'PAGO'
AND e.id_envio IS NULL;

12)​SELECT
p.id_pedido,
total_pedido,
valor_aprovado
FROM (
SELECT
p.id_pedido,
SUM([Link] * ip.preco_unitario - ip.desconto_item)
+ [Link] - [Link] AS total_pedido,
SUM(CASE WHEN [Link]='APROVADO' THEN [Link] ELSE 0 END) AS
valor_aprovado
FROM pedidos p
JOIN itens_pedido ip
ON p.id_pedido = ip.id_pedido
LEFT JOIN pagamentos pg
ON p.id_pedido = pg.id_pedido
GROUP BY p.id_pedido
)t
WHERE valor_aprovado <> total_pedido;

13)​SELECT
[Link] AS categoria,
CASE
WHEN [Link] <= 50 THEN 'BARATO'
WHEN [Link] <= 200 THEN 'MEDIO'
ELSE 'CARO'
END AS faixa,
COUNT(*) AS quantidade
FROM produtos p
JOIN categorias c
ON p.id_categoria = c.id_categoria
GROUP BY categoria, faixa;

14)​SELECT
c.id_cliente,
[Link],
MAX(p.data_pedido) AS ultimo_pedido
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente = p.id_cliente
WHERE [Link] = 'ATIVO'
GROUP BY c.id_cliente, [Link]
HAVING DATEDIFF(CURDATE(), MAX(p.data_pedido)) > 90;

15)​SELECT
[Link] AS categoria,
SUM([Link]) AS qtd_total_itens,
SUM([Link] * ip.preco_unitario) AS valor_total_itens
FROM itens_pedido ip
JOIN produtos p
ON ip.id_produto = p.id_produto
JOIN categorias c
ON p.id_categoria = c.id_categoria
GROUP BY [Link]
ORDER BY valor_total_itens DESC;

16)​SELECT
p.id_pedido,
COUNT(ip.id_item) AS qtde_itens_distintos,
SUM([Link] * ip.preco_unitario - ip.desconto_item) AS subtotal
FROM pedidos p
JOIN itens_pedido ip
ON p.id_pedido = ip.id_pedido
GROUP BY p.id_pedido
HAVING qtde_itens_distintos >= 5;
17)​SELECT
nome,
email,
DATE_FORMAT(data_cadastro,'%d/%m/%Y') AS data_cadastro
FROM clientes
WHERE email LIKE '%@[Link]';

SELECT COUNT(*) AS total


FROM clientes
WHERE email LIKE '%@[Link]';

18)​SELECT *
FROM (
SELECT
YEAR(p.data_pedido) AS ano,
MONTH(p.data_pedido) AS mes,
[Link],
SUM([Link]) AS qtd,
ROW_NUMBER() OVER(
PARTITION BY YEAR(p.data_pedido), MONTH(p.data_pedido)
ORDER BY SUM([Link]) DESC
) AS posicao
FROM itens_pedido ip
JOIN pedidos p
ON ip.id_pedido = p.id_pedido
JOIN produtos pr
ON ip.id_produto = pr.id_produto
GROUP BY ano, mes, [Link]
)t
WHERE posicao = 1;

19)​SELECT
YEAR(data_pedido) AS ano,
MONTH(data_pedido) AS mes,
COUNT(*) AS total_pedidos,
SUM(status='CANCELADO') AS cancelados,
ROUND(SUM(status='CANCELADO') / COUNT(*) * 100,2) AS
percentual_cancelamento
FROM pedidos
GROUP BY ano, mes;

20)​SELECT
[Link],
SUM([Link] * ip.preco_unitario - ip.desconto_item + [Link] - [Link])
AS faturamento
FROM pedidos p
JOIN enderecos e
ON p.id_endereco = e.id_endereco
JOIN itens_pedido ip
ON p.id_pedido = ip.id_pedido
GROUP BY [Link]
ORDER BY faturamento DESC
LIMIT 10;

Você também pode gostar