Consultas SQL para Análise de Vendas de Loja
Classificado em Inglês
Escrito em em
português com um tamanho de 3,31 KB
Modelagem do Banco de Dados
create table Loja (cnpj char (18) not null primary key, razaosocial varchar(70));
create table Cliente (cpf char (14) not null primary key, nome varchar (70), logradouro varchar (100), bairro varchar (100), cidade varchar (100), uf char (2), cep varchar (9), telefone char (14), email varchar (100));
create table Pedido (numpedido integer, data date, cpf char (14), cnpjloja char (18));
create table PedxProd (numpedido integer not null, item integer not null, precovenda double precision, quantidade decimal (14,3));
alter table PedxProd add constraint pk_pppedxpro primary key (numpedido, codigo);
alter table PedxProd add constraint fk_pppedido foreign key (numpedido) references Pedido (numpedido);
alter table PedxProd add constraint fk_ppproduto foreign key (codigo) references Produto (codigo);
alter table Pedido add cnpjloja char(18);
alter table Pedido add constraint fk_pcliente foreign key (cpf) references Cliente (cpf);
Consultas de Pedidos
Todos os dados de um determinado pedido
Select ped.*, pxp.* from pedido as ped inner join pedxprod as pxp on ped.numpedido = pxp.numpedido where pxp.numpedido = '201000001';
Número, data e nome do cliente de todos os pedidos realizados em um período
Select ped.numpedido, ped.data, cli.nome from pedido as ped inner join cliente as cli on ped.cpf = cli.cpf where ped.data >= '15.05.2010' and ped.data <=>=>
Todos os pedidos de um cliente: número, data, total e somatória geral dos totais
select ped.numpedido, ped.data, pxp.total from pedido as ped inner join (select pxp.numpedido, sum (subtotal) as total from pedxprod as pxp group by pxp.numpedido) pxp on ped.numpedido = pxp.numpedido where ped.cpf = '559.628.430-84';
Consultas de Produtos e Vendas
Somatória de quantidade e subtotal dos produtos vendidos em um período
Select pro.descricao, ped.data, pxp.qtd, pxp.valor from produto as pro inner join ( pedido as ped inner join (select pxp.codigo, pxp.numpedido, sum (pxp.quantidade) as qtd, sum (subtotal) as valor from pedxprod as pxp group by pxp.codigo, pxp.numpedido) pxp on ped.numpedido = pxp.numpedido) on pro.codigo = pxp.codigo where ped.data >= '15.05.2010' and ped.data <=>=>
Média diária das vendas em um período
with mediapordia as (select count (distinct ped.data) as dias, (select sum (pxp.quantidade * pxp.precovenda) as total from pedxprod as pxp) from pedido ped) select total, dias, (total / dias) as media from mediapordia;
Produto mais vendido
select first 1 pro.descricao, pxp.total from produto as pro inner join (select pxp.codigo, sum (pxp.subtotal) as total from pedxprod as pxp group by codigo) pxp on pro.codigo = pxp.codigo order by total desc;
Produto menos vendido
select first 1 pro.descricao, pxp.total from produto as pro inner join (select pxp.codigo, sum (pxp.subtotal) as total from pedxprod as pxp group by codigo) pxp on pro.codigo = pxp.codigo order by total;
Ranking de Clientes
Ranking com os 10 clientes que mais gastam em compras
select first 10 cli.nome, (select sum (pxp.quantidade * pxp.precovenda) from pedxprod as pxp inner join pedido as ped on ped.cpf = cli.cpf) as Total from cliente as cli order by Total desc;