Fundamentos de SQL
Projeto Final
1 Passos iniciais
1.1 Limpar o ambiente R.
#items in work space
ls()## character(0)
# remove all
rm(list=ls())1.2 Definir diretório.
#intall_packages("knitr")
knitr::opts_chunk$set(echo = TRUE)
knitr::opts_chunk$set(warning = FALSE, message = FALSE)
knitr::opts_knit$set(root.dir = "C:\\0. R\\MBA\\DS&S\\M5 - Fundamentos de SQL")1.3 Carregar pacotes.
## Load Packages
load.pks = c(
"readr",
"ggplot2",
"plotly",
# "e1071",
# "Hmisc",
# "DescTools",
# "nortest",
# "esquisse",
"gridExtra",
"kableExtra",
"DBI",
"RMySQL",
"dplyr"
)
# lapply(load.pks, install.packages, character.only = TRUE) #instalar
lapply(load.pks, require, character.only = TRUE) #carregar## [[1]]
## [1] TRUE
##
## [[2]]
## [1] TRUE
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] TRUE
##
## [[5]]
## [1] TRUE
##
## [[6]]
## [1] TRUE
##
## [[7]]
## [1] TRUE
##
## [[8]]
## [1] TRUE
1.4 Definir connecção com MySQL.
# drive e conexão
drv <- dbDriver("MySQL")
con <- dbConnect(drv, username="root", password="senha", dbname ="ERP", host='127.0.0.1')1.5 Importar tabela INEP a partir do GitHub usando R.
censo2020_inep <- read_csv2('https://raw.githubusercontent.com/RakellM/MBA_DS-S_FundSQL_banco-de-dados-para-analistas-e-cientistas-de-dados/main/sales.z/Censo2020_inep.csv')
write.csv2( censo2020_inep,
"C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\Censo2020_inep.csv", row.names=FALSE)
MySQL só aceita arquivos externos carregados em uma determinada pasta,
desse modo, re-criei o arquivo lido em R nessa pasta.
# dbWriteTable(con, "erp.censo2000_inep", censo2020_inep, overwrite=TRUE)1.6 ERP DataBase criação
Foi usado o script 1. Script_Criacao_BD_ERP.sql para criar o ambiente ERP e as tabelas.
2 Fase 1
2.1 Quantidade de dependentes
-- Quantidade de dependentes
select ("Dependentes") as Total,
count(distinct(CdDep)) as Quantidade
from erp.tbdependente
group by 1;| Total | Quantidade |
|---|---|
| Dependentes | 6 |
2.2 Quantidade de dependentes por sexo
-- Quantidade de dependentes por sexo
select ("Dependentes") as Total,
trim(SxDep) as Sexo,
count(distinct(CdDep)) as Quantidade
from erp.tbdependente
group by 1,2;| Total | Sexo | Quantidade |
|---|---|---|
| Dependentes | Fem | 3 |
| Dependentes | Masc | 3 |
2.3 Quantidade de clientes da região sul
-- Quantidade de clientes da região sul
select ("Clientes") as Total,
("Sul") as `Região`,
count(distinct(CdCli)) as Quantidade
from erp.tbvendas
where trim(Estado) in ('Paraná', 'Santa Catarina', 'Rio Grande do Sul')
group by 1;| Total | Região | Quantidade |
|---|---|---|
| Clientes | Sul | 2 |
2.4 Uma descrição breve dos produtos da empresa (codigo, nome, tipo)
-- Uma descrição breve dos produtos da empresa (codigo, nome, tipo)
select distinct CdPro as `Código Produto`,
trim(NmPro) as `Nome Produto`,
trim(TpPro) as `Tipo Produto`
from erp.tbvendas;| Código Produto | Nome Produto | Tipo Produto |
|---|---|---|
| 1 | Produto A | A |
| 2 | Produto C | A |
| 3 | Produto E | B |
| 5 | Produto CH | A |
| 4 | Produto SL | A |
| 6 | Produto TN | C |
2.5 Quais os 5 produtos mais vendidos de 2021?
-- Quais os 5 produtos mais vendidos de 2021?
select CdPro as `Código Produto`,
trim(NmPro) as `Nome Produto`,
trim(TpPro) as `Tipo Produto`,
sum(Qtd) as Quantidade
from erp.tbvendas
where year(DtVen) = 2021
group by 1,2,3
order by Quantidade desc
limit 5;| Código Produto | Nome Produto | Tipo Produto | Quantidade |
|---|---|---|---|
| 1 | Produto A | A | 357700 |
| 6 | Produto TN | C | 324000 |
| 4 | Produto SL | A | 93000 |
| 2 | Produto C | A | 75000 |
| 5 | Produto CH | A | 20030 |
2.6 Nome, Nome em Maiúsculo e Nome em Minúsculo, dos vendedores do sexo feminino
-- Nome, Nome em Maiúsculo e Nome em Minúsculo, dos vendedores do sexo feminino
select trim(NmVdd) as `Nome Vendedor`,
upper(trim(NmVdd)) as `Nome Vendedor (maiúsculo)`,
lower(trim(NmVdd)) as `Nome Vendedor (minúsculo)`
from erp.tbvendedor
where SxVdd = 0 -- 1=Masc e 0=Fem
;| Nome Vendedor | Nome Vendedor (maiúsculo) | Nome Vendedor (minúsculo) |
|---|---|---|
| Vendedor 5 | VENDEDOR 5 | vendedor 5 |
| Vendedor 6 | VENDEDOR 6 | vendedor 6 |
| Vendedor 7 | VENDEDOR 7 | vendedor 7 |
| Vendedor 8 | VENDEDOR 8 | vendedor 8 |
| Vendedor 9 | VENDEDOR 9 | vendedor 9 |
| Vendedor 10 | VENDEDOR 10 | vendedor 10 |
2.7 Nome e idade de todos os dependentes, ordenados do mais velho para o mais novo
-- Nome e idade de todos os dependentes, ordenados do mais velho para o mais novo
select trim(NmDep) as `Nome Dependente`,
floor( datediff( date(localtimestamp()) , date(DtNasc) ) / 365 ) as Idade
from erp.tbdependente
order by Idade desc;| Nome Dependente | Idade |
|---|---|
| Dependente 1 | 12 |
| Dependente 4 | 12 |
| Dependente 2 | 10 |
| Dependente 3 | 9 |
| Dependente 6 | 4 |
| Dependente 5 | 2 |
2.8 Somatório do Valor Total de Vendas (concluídas e não deletadas) por Estado
-- Somatório do Valor Total de Vendas (concluídas e não deletadas) por Estado
select trim(Estado) as `Estado`,
-- status,
-- deletado,
-- sum(Qtd) as Quantidade,
sum(Qtd * VrUnt) as `Valor Vendido`
from erp.tbvendas
where status like "%Concluído%" and deletado = 0 -- variáveis binarias 0 é falso e 1 é verdadeiro
group by 1 -- ,2,3
order by `Valor Vendido` desc;| Estado | Valor Vendido |
|---|---|
| Ceará | 1276030.0 |
| Rio de Janeiro | 1237250.0 |
| Rio Grande do Sul | 1082430.0 |
| São Paulo | 747250.0 |
| Mato Grosso do Sul | 212060.0 |
| Minas Gerais | 82008.0 |
| Piauí | 77500.0 |
| Alagoas | 69700.0 |
| Paraíba | 63240.0 |
| Tocantins | 58062.5 |
2.9 Somatório de Unidades Vendidas (concluídas e não deletadas) por Produto
-- Somatório de Unidades Vendidas (concluídas e não deletadas) por Produto
select trim(NmPro) as Produto,
-- status,
-- deletado,
sum(Qtd) as Quantidade
-- sum(Qtd * VrUnt) as `Valor Vendido`
from erp.tbvendas
where status like "%Concluído%" and deletado = 0 -- variáveis binarias 0 é falso e 1 é verdadeiro
group by 1 -- ,2,3
order by Quantidade desc;| Produto | Quantidade |
|---|---|
| Produto A | 1358200 |
| Produto C | 459500 |
| Produto TN | 232250 |
| Produto SL | 155000 |
| Produto CH | 120270 |
| Produto E | 106030 |
2.10 Média do Valor Total de Vendas por Estado
-- Média do Valor Total de Vendas por Estado
select trim(Estado) as Estado,
-- status,
-- deletado,
-- sum(Qtd) as Quantidade,
round(sum(Qtd * VrUnt), 2) as `Valor vendido`,
count(*) as n,
round(avg(Qtd * VrUnt), 2) as `Valor Médio`
from erp.tbvendas
-- where status like "%Concluído%" and deletado = 0 -- variáveis binarias 0 é falso e 1 é verdadeiro
group by 1 -- ,2,3
order by `Valor Médio` desc;| Estado | Valor vendido | n | Valor Médio |
|---|---|---|---|
| Rio de Janeiro | 1237250 | 7 | 176750.00 |
| Rio Grande do Sul | 1082430 | 9 | 120270.00 |
| São Paulo | 854000 | 8 | 106750.00 |
| Ceará | 1280960 | 24 | 53373.33 |
| Mato Grosso do Sul | 212060 | 11 | 19278.18 |
| Tocantins | 81000 | 8 | 10125.00 |
| Paraíba | 67320 | 9 | 7480.00 |
| Alagoas | 69700 | 10 | 6970.00 |
| Piauí | 78875 | 13 | 6067.31 |
| Santa Catarina | 52360 | 11 | 4760.00 |
2.11 Nome dos clientes que compram o produto 1
-- Nome dos clientes que compram o produto 1
select distinct
CdPro as `Código Produto`,
trim(NmPro) as `Nome Produto`,
trim(NmCli) as `Nome Cliente`
from erp.tbvendas
where CdPro = 1 ;| Código Produto | Nome Produto | Nome Cliente |
|---|---|---|
| 1 | Produto A | Cliente AA |
| 1 | Produto A | Cliente BB |
| 1 | Produto A | Cliente CC |
| 1 | Produto A | Cliente DD |
| 1 | Produto A | Cliente DE |
| 1 | Produto A | Cliente EE |
| 1 | Produto A | Cliente EF |
| 1 | Produto A | Cliente CCC |
| 1 | Produto A | Cliente MAC |
2.12 Quantidade mínima e qual o respectivo produto
-- Quantidade mínima e qual o respectivo produto
select
CdPro as `Código Produto`,
trim(NmPro) as `Nome Produto`,
min(Qtd) as `Quantidade Mínima`
from erp.tbvendas
group by 1,2
order by `Quantidade Mínima`
limit 1;| Código Produto | Nome Produto | Quantidade Mínima |
|---|---|---|
| 2 | Produto C | 250 |
2.13 Uma descrição detalhada dos produtos da empresa (codigo, nome, tipo, Qtd em Estoque)
-- Uma descrição detalhada dos produtos da empresa (codigo, nome, tipo, Qtd em Estoque)
select
t2.CdPro as `Código Produto`,
trim(t1.NmPro) as `Nome Produto`,
t1.TpPro as `Tipo Produto`,
t1.Und as `Unidade de Medida`,
t2.QtdPro_sum as `Estoque Quantidade`
from (
select distinct CdPro, NmPro, TpPro, Und
from erp.tbvendas
) t1
right join (
select CdPro, sum(QtdPro) as QtdPro_sum
from erp.tbestoqueproduto
group by 1
) t2
on t1.CdPro = t2.CdPro
order by `Estoque Quantidade`;| Código Produto | Nome Produto | Tipo Produto | Unidade de Medida | Estoque Quantidade |
|---|---|---|---|---|
| 6 | Produto TN | C | KG | 1000 |
| 5 | Produto CH | A | KG | 2000 |
| 3 | Produto E | B | KG | 2000 |
| 2 | Produto C | A | KG | 5000 |
| 1 | Produto A | A | KG | 20000 |
| 4 | Produto SL | A | KG | 30000 |
2.14 Nome dos Vendedores que realizaram determinadas Vendas (Codigo da Venda, Data da Venda, Produto e nome do vendedor)
-- Nome dos Vendedores que realizaram determinadas Vendas (Codigo da Venda, Data da Venda, Produto e nome do vendedor)
select
t1.CdVen as `Código de Vendas`,
date(t1.DtVen) as `Data da Venda`,
t1.NmPro as `Produto Nome`,
trim(t2.NmVdd) as `Vendendor Nome`
from (
select
CdVen,
DtVen,
trim(NmPro) as NmPro,
CdVdd,
sum(Qtd) as Qtd
from erp.tbvendas
group by 1,2,3,4 ) t1
left join erp.tbvendedor t2
on t1.CdVdd = t2.CdVdd
order by `Data da Venda`;| Código de Vendas | Data da Venda | Produto Nome | Vendendor Nome |
|---|---|---|---|
| 1 | 2010-02-01 | Produto A | Vendedor 2 |
| 3 | 2010-02-01 | Produto A | Vendedor 4 |
| 4 | 2010-02-02 | Produto C | Vendedor 2 |
| 5 | 2010-02-03 | Produto A | Vendedor 1 |
| 120 | 2010-02-13 | Produto A | Vendedor 6 |
| 150 | 2010-03-01 | Produto E | Vendedor 5 |
| 7 | 2010-03-05 | Produto A | Vendedor 2 |
| 8 | 2010-03-06 | Produto A | Vendedor 2 |
| 180 | 2010-03-15 | Produto SL | Vendedor 1 |
| 25 | 2010-04-07 | Produto A | Vendedor 3 |
2.15 Relação com o nome dos vendedores e seus respectivos filhos (dependentes - nome e data de nascimento) – montar uma view com estes dados
Como não foi especificado que se queria somente os vendedores com filhos, deixei todos os vendedores na base, assim a consulta fica possível para o cliente analisar se determinado vendedor tem ou não filhos.
drop view if exists erp.vwDependentes ;-- Relação com o nome dos vendedores e seus respectivos filhos (dependentes - nome e data de nascimento) -- montar uma view com estes dados
create view erp.vwDependentes as
select
t1.NmVdd as `Vendedor Nome`,
t2.NmDep as `Dependente Nome`,
date(t2.DtNasc) as `Data de Nascimento`
from erp.tbvendedor t1
left join erp.tbdependente t2
on t1.CdVdd = t2.CdVdd
order by t1.CdVdd;select * from erp.vwDependentes ;| Vendedor Nome | Dependente Nome | Data de Nascimento |
|---|---|---|
| Vendedor 1 | Dependente 1 | 2010-02-02 |
| Vendedor 2 | NA | NA |
| Vendedor 3 | Dependente 2 | 2012-04-05 |
| Vendedor 3 | Dependente 3 | 2013-03-04 |
| Vendedor 4 | Dependente 4 | 2010-05-05 |
| Vendedor 4 | Dependente 5 | 2019-07-06 |
| Vendedor 5 | NA | NA |
| Vendedor 6 | NA | NA |
| Vendedor 7 | NA | NA |
| Vendedor 8 | NA | NA |
2.16 Criar uma view com informações de vendas, produto, estoque, cliente, vendedores (apenas concluídas e não deletadas)
drop view if exists erp.vwVendas ;-- Criar uma view com informações de vendas, produto, estoque, cliente, vendedores (apenas concluídas e não deletadas)
create view erp.vwVendas as
select
a.CdVen as `Código da Venda`,
date(a.DtVen) as `Data da Venda`,
a.CdCli as `Código do Cliente`,
trim(a.NmCli) as `Nome do Cliente`,
a.CdVdd as `Código do Vendedor`,
trim(b.NmVdd) as `Vendedor Nome`,
case
when b.SxVdd = 1 then "Masculino"
when b.SxVdd = 0 then "Feminino"
else NULL
end as `Vendedor Sexo`,
b.PercComissao as `Percentual Comissão do Vendedor`,
trim(a.Cidade) as `Cidade`,
trim(a.Estado) as `Estado`,
trim(a.Pais) as `País`,
a.CdPro as `Código do Produto`,
trim(a.NmPro) as `Nome do Produto`,
trim(a.TpPro) as `Tipo do Produto`,
trim(a.Und) as `Unidade de Medida`,
a.VrUnt as `Valor Unitário`,
a.Qtd as `Quantidade Vendida`,
(a.Qtd * a.VrUnt) as `Valor vendido`,
a.QtdPro_sum as `Quantidade em Estoque`
from (
select
t1.*,
t2.QtdPro_sum
from (
select *
from erp.tbvendas
where status like "%Concluído%" and deletado = 0 -- variáveis binarias 0 é falso e 1 é verdadeiro
) t1
left join (
select CdPro, sum(QtdPro) as QtdPro_sum
from erp.tbestoqueproduto
group by 1
) t2
on t1.CdPro = t2.CdPro
) a
left join erp.tbvendedor b
on a.CdVdd = b.CdVdd ;select * from erp.vwVendas ;| Código da Venda | Data da Venda | Código do Cliente | Nome do Cliente | Código do Vendedor | Vendedor Nome | Vendedor Sexo | Percentual Comissão do Vendedor | Cidade | Estado | País | Código do Produto | Nome do Produto | Tipo do Produto | Unidade de Medida | Valor Unitário | Quantidade Vendida | Valor vendido | Quantidade em Estoque |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2010-02-01 | 1 | Cliente AA | 2 | Vendedor 2 | Masculino | 1.0 | Florianópolis | Santa Catarina | Brasil | 1 | Produto A | A | KG | 0.34 | 4000 | 1360 | 20000 |
| 3 | 2010-02-01 | 5 | Cliente BB | 4 | Vendedor 4 | Masculino | 0.5 | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | KG | 0.34 | 4200 | 1428 | 20000 |
| 4 | 2010-02-02 | 3 | Cliente BC | 2 | Vendedor 2 | Masculino | 1.0 | Baturité | Ceará | Brasil | 2 | Produto C | A | KG | 7.00 | 250 | 1750 | 5000 |
| 5 | 2010-02-03 | 4 | Cliente CC | 1 | Vendedor 1 | Masculino | 1.0 | Fortaleza | Ceará | Brasil | 1 | Produto A | A | KG | 0.34 | 4500 | 1530 | 20000 |
| 7 | 2010-03-05 | 6 | Cliente DD | 2 | Vendedor 2 | Masculino | 1.0 | Goiânia | Goiás | Brasil | 1 | Produto A | A | KG | 0.34 | 12500 | 4250 | 20000 |
| 8 | 2010-03-06 | 7 | Cliente DE | 2 | Vendedor 2 | Masculino | 1.0 | João Pessoa | Paraíba | Brasil | 1 | Produto A | A | KG | 0.34 | 12000 | 4080 | 20000 |
| 9 | 2010-04-07 | 8 | Cliente EE | 3 | Vendedor 3 | Masculino | 1.0 | Natal | Rio Grande do Norte | Brasil | 1 | Produto A | A | KG | 0.34 | 17500 | 5950 | 20000 |
| 11 | 2011-12-08 | 2 | Cliente EF | 9 | Vendedor 9 | Feminino | 0.5 | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | KG | 0.34 | 7000 | 2380 | 20000 |
| 12 | 2012-12-08 | 2 | Cliente EF | 9 | Vendedor 9 | Feminino | 0.5 | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | KG | 0.34 | 8000 | 2720 | 20000 |
| 13 | 2013-12-08 | 2 | Cliente EF | 9 | Vendedor 9 | Feminino | 0.5 | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | KG | 0.34 | 8000 | 2720 | 20000 |
2.17 View de quantidade de vendas por canal
drop view if exists erp.vwVendasPorCanal ;-- View de quantidade de vendas por canal
create view erp.vwVendasPorCanal as
select
CdCanalVendas as `Códido Canal`,
trim(NmCanalVendas) as `Canal de Vendas`,
count(distinct(CdVen)) as `Quantidade Vendas`
from erp.tbvendas
group by 1,2;select * from erp.vwVendasPorCanal ;| Códido Canal | Canal de Vendas | Quantidade Vendas |
|---|---|---|
| 1 | Matriz | 147 |
| 2 | Ecommerce | 27 |
3 Fase 2
3.1 Filtrar a tabela de vendedores pelo vendedor de nome: Vendedor 6
-- Filtrar a tabela de vendedores pelo vendedor de nome: Vendedor 6
select
CdVdd as `Vendedor Código`,
NmVdd as `Vendedor Nome`,
case
when SxVdd = 1 then 'Masculino'
when SxVdd = 0 then 'Feminino'
else NULL
end as `Vendedor Sexo`,
PercComissao as `Vendedor Percentual Comissão`
from erp.tbvendedor
where trim(NmVdd) like "% 6" ;| Vendedor Código | Vendedor Nome | Vendedor Sexo | Vendedor Percentual Comissão |
|---|---|---|---|
| 6 | Vendedor 6 | Feminino | 0.5 |
3.2 Uma consulta que retorne o nome dos dependentes, mas quando for o dependente de código 5, retorne o seu nome. (Usando IF ou CASE)
-- Uma consulta que retorne o nome dos dependentes, mas quando for o
-- dependente de código 5, retorne o seu nome. (Usando IF ou CASE)
select
CdDep as `Dependente Código`,
case
when CdDep = 5 then 'Raquel'
else NmDep
end as `Dependente Nome`,
date(DtNasc) as `Data de Nascimento`,
SxDep as `Dependente Sexo`,
CdVdd as `Vendedor Código`,
InepEscola
from erp.tbdependente;| Dependente Código | Dependente Nome | Data de Nascimento | Dependente Sexo | Vendedor Código | InepEscola |
|---|---|---|---|---|---|
| 1 | Dependente 1 | 2010-02-02 | Masc | 1 | 11019131 |
| 2 | Dependente 2 | 2012-04-05 | Masc | 3 | 11010860 |
| 3 | Dependente 3 | 2013-03-04 | Fem | 3 | 11010860 |
| 4 | Dependente 4 | 2010-05-05 | Fem | 4 | 11018500 |
| 5 | Raquel | 2019-07-06 | Masc | 4 | 11018500 |
| 6 | Dependente 6 | 2018-03-02 | Fem | 9 | 11036680 |
3.3 Retornar todas as vendas entre os dias 07/05/2019 a 03/03/2021 unidas com as todas as vendas entre os dias 11/09/2011 a 03/09/2012
-- Retornar todas as vendas entre os dias 07/05/2019 a 03/03/2021 unidas
-- com as todas as vendas entre os dias 11/09/2011 a 03/09/2012
select *
from erp.tbvendas
where date(DtVen) between '2019-05-07' and '2021-03-03'
union
select *
from erp.tbvendas
where date(DtVen) between '2011-09-11' and '2012-09-03' ;| CdVen | DtVen | CdCli | NmCli | Cidade | Estado | Pais | CdPro | NmPro | TpPro | Qtd | Und | VrUnt | CdVdd | CdCanalVendas | NmCanalVendas | status | deletado |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 19 | 2019-12-08 00:00:00 | 2 | Cliente EF | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 11000 | KG | 0.34 | 9 | 1 | Matriz | Concluído | 0 |
| 20 | 2020-12-08 00:00:00 | 2 | Cliente EF | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 12000 | KG | 0.34 | 9 | 1 | Matriz | Concluído | 0 |
| 21 | 2021-01-09 00:00:00 | 2 | Cliente EF | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 5000 | KG | 0.34 | 9 | 2 | Ecommerce | Concluído | 0 |
| 36 | 2020-04-07 00:00:00 | 8 | Cliente EE | Natal | Rio Grande do Norte | Brasil | 1 | Produto A | A | 15500 | KG | 0.34 | 3 | 1 | Matriz | Concluído | 0 |
| 48 | 2020-02-01 00:00:00 | 1 | Cliente AA | Florianópolis | Santa Catarina | Brasil | 1 | Produto A | A | 4000 | KG | 0.34 | 2 | 1 | Matriz | Concluído | 0 |
| 49 | 2021-02-01 00:00:00 | 1 | Cliente AA | Florianópolis | Santa Catarina | Brasil | 1 | Produto A | A | 14000 | KG | 0.34 | 2 | 2 | Ecommerce | Concluído | 0 |
| 59 | 2020-02-01 00:00:00 | 5 | Cliente BB | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 4200 | KG | 0.34 | 4 | 1 | Matriz | Concluído | 0 |
| 69 | 2019-06-07 00:00:00 | 4 | Cliente CC | Fortaleza | Ceará | Brasil | 1 | Produto A | A | 14500 | KG | 0.34 | 1 | 1 | Matriz | Concluído | 0 |
| 70 | 2020-07-07 00:00:00 | 4 | Cliente CC | Fortaleza | Ceará | Brasil | 1 | Produto A | A | 14500 | KG | 0.34 | 1 | 1 | Matriz | Concluído | 0 |
| 78 | 2020-03-05 00:00:00 | 6 | Cliente DD | Goiânia | Goiás | Brasil | 1 | Produto A | A | 12500 | KG | 0.34 | 2 | 1 | Matriz | Concluído | 0 |
ou
select
CdVen as `Código de Vendas`,
date(DtVen) as `Data da Venda`,
CdCli as `Cliente Código`,
trim(NmCli) as `Cliente Nome`,
trim(Cidade) as `Cidade`,
trim(Estado) as `Estado`,
trim(Pais) as `País`,
CdPro as `Produto Código`,
trim(NmPro) as `Produto Nome`,
trim(TpPro) as `Produto Tipo`,
Qtd as `Quantidade Vendida`,
trim(Und) as `Unidade de Medida`,
VrUnt as `Valor Unitário`,
CdVdd as `Vendedor Código`,
trim(NmCanalVendas) as `Canal de Vendas`,
status,
deletado
from erp.tbvendas
where (date(DtVen) between '2019-05-07' and '2021-03-03') or (date(DtVen) between '2011-09-11' and '2012-09-03') ;| Código de Vendas | Data da Venda | Cliente Código | Cliente Nome | Cidade | Estado | País | Produto Código | Produto Nome | Produto Tipo | Quantidade Vendida | Unidade de Medida | Valor Unitário | Vendedor Código | Canal de Vendas | status | deletado |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11 | 2011-12-08 | 2 | Cliente EF | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 7000 | KG | 0.34 | 9 | Matriz | Concluído | 0 |
| 19 | 2019-12-08 | 2 | Cliente EF | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 11000 | KG | 0.34 | 9 | Matriz | Concluído | 0 |
| 20 | 2020-12-08 | 2 | Cliente EF | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 12000 | KG | 0.34 | 9 | Matriz | Concluído | 0 |
| 21 | 2021-01-09 | 2 | Cliente EF | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 5000 | KG | 0.34 | 9 | Ecommerce | Concluído | 0 |
| 27 | 2012-04-07 | 8 | Cliente EE | Natal | Rio Grande do Norte | Brasil | 1 | Produto A | A | 9500 | KG | 0.34 | 3 | Matriz | Concluído | 0 |
| 36 | 2020-04-07 | 8 | Cliente EE | Natal | Rio Grande do Norte | Brasil | 1 | Produto A | A | 15500 | KG | 0.34 | 3 | Matriz | Concluído | 0 |
| 40 | 2012-02-01 | 1 | Cliente AA | Florianópolis | Santa Catarina | Brasil | 1 | Produto A | A | 14000 | KG | 0.34 | 2 | Matriz | Em aberto | 0 |
| 48 | 2020-02-01 | 1 | Cliente AA | Florianópolis | Santa Catarina | Brasil | 1 | Produto A | A | 4000 | KG | 0.34 | 2 | Matriz | Concluído | 0 |
| 49 | 2021-02-01 | 1 | Cliente AA | Florianópolis | Santa Catarina | Brasil | 1 | Produto A | A | 14000 | KG | 0.34 | 2 | Ecommerce | Concluído | 0 |
| 51 | 2012-02-01 | 5 | Cliente BB | Belo Horizonte | Minas Gerais | Brasil | 1 | Produto A | A | 4200 | KG | 0.34 | 4 | Matriz | Concluído | 0 |
3.4 Retornar o nome do produto (apenas os 5 primeiros caracteres) e a quantidade de venda com 10 dígitos, completando com zeros a esquerda.
O código abaixo foi feito com o intuito de se ter como voltar e ver qual item é qual, já que o Nome do Produto quando suprimido pelas 5 primeiras letras será igual para todos.
-- Retornar o nome do produto (apenas os 5 primeiros caracteres) e a quantidade
-- de venda com 10 dígitos, completando com zeros a esquerda.
select
CdPro as `Produto Código`,
trim(NmPro) as `Produto Nome`,
left(trim(NmPro),5) as `Primeiras 5 letras do Produto Nome`,
lpad(Qtd,10,0) as `LPad Quantidade Vendida` -- ,
-- Qtd as `Quantidade Vendida`
from erp.tbvendas
;| Produto Código | Produto Nome | Primeiras 5 letras do Produto Nome | LPad Quantidade Vendida |
|---|---|---|---|
| 1 | Produto A | Produ | 0000004000 |
| 1 | Produto A | Produ | 0000004200 |
| 2 | Produto C | Produ | 0000000250 |
| 1 | Produto A | Produ | 0000004500 |
| 1 | Produto A | Produ | 0000012500 |
| 1 | Produto A | Produ | 0000012000 |
| 1 | Produto A | Produ | 0000017500 |
| 1 | Produto A | Produ | 0000007000 |
| 1 | Produto A | Produ | 0000008000 |
| 1 | Produto A | Produ | 0000008000 |
Essa seria a query solicitada pelo problema.
-- Retornar o nome do produto (apenas os 5 primeiros caracteres) e a quantidade
-- de venda com 10 dígitos, completando com zeros a esquerda.
select
-- CdPro as `Produto Código`,
-- trim(NmPro) as `Produto Nome`,
left(trim(NmPro),5) as `Primeiras 5 letras do Produto Nome`,
lpad(Qtd,10,0) as `LPad Quantidade Vendida` -- ,
-- Qtd as `Quantidade Vendida`
from erp.tbvendas
;| Primeiras 5 letras do Produto Nome | LPad Quantidade Vendida |
|---|---|
| Produ | 0000004000 |
| Produ | 0000004200 |
| Produ | 0000000250 |
| Produ | 0000004500 |
| Produ | 0000012500 |
| Produ | 0000012000 |
| Produ | 0000017500 |
| Produ | 0000007000 |
| Produ | 0000008000 |
| Produ | 0000008000 |
3.5 Qual o produto que tem a maior quantidade de vendas no canal: Ecommerce?
-- Qual o produto que tem a maior quantidade de vendas no canal: Ecommerce?
select
-- CdCanalVendas,
trim(NmCanalVendas) as `Canal de Vendas`,
NmPro as `Produto Nome`,
sum(Qtd) as `Quantidade Vendas`
from erp.tbvendas
where CdCanalVendas=2
group by 1,2 -- ,3
order by sum(Qtd) desc
limit 1;| Canal de Vendas | Produto Nome | Quantidade Vendas |
|---|---|---|
| Ecommerce | Produto TN | 324000 |
3.6 Existiram vendas para produtos em MVP - validação? Quais foram?
-- Existiram vendas para produtos em MVP - validação? Quais foram?
select
t1.CdVen as `Código de Vendas`,
date(t1.DtVen) as `Data da Venda`,
t1.CdCli as `Cliente Código`,
trim(t1.NmCli) as `Cliente Nome`,
trim(t1.Cidade) as `Cidade`,
trim(t1.Estado) as `Estado`,
trim(t1.Pais) as `País`,
t1.CdPro as `Produto Código`,
trim(t1.NmPro) as `Produto Nome`,
trim(t1.TpPro) as `Produto Tipo`,
t1.Qtd as `Quantidade Vendida`,
trim(t1.Und) as `Unidade de Medida`,
t1.VrUnt as `Valor Unitário`,
t1.CdVdd as `Vendedor Código`,
trim(t1.NmCanalVendas) as `Canal de Vendas`,
trim(t1.status),
t1.deletado
from erp.tbvendas t1
inner join (
select distinct CdPro from erp.tbestoqueproduto where trim(Status) = 'MVP - validação'
)t2
on t1.CdPro = t2.CdPro ;| Código de Vendas | Data da Venda | Cliente Código | Cliente Nome | Cidade | Estado | País | Produto Código | Produto Nome | Produto Tipo | Quantidade Vendida | Unidade de Medida | Valor Unitário | Vendedor Código | Canal de Vendas | trim(t1.status) | deletado |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | 2021-03-15 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 1750 | KG | 0.25 | 5 | Ecommerce | Concluído | 0 |
| 201 | 2021-04-05 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 11750 | KG | 0.25 | 5 | Ecommerce | Concluído | 0 |
| 202 | 2021-05-15 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 21750 | KG | 0.25 | 5 | Ecommerce | Concluído | 0 |
| 203 | 2021-05-16 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 31750 | KG | 0.25 | 5 | Ecommerce | Concluído | 0 |
| 204 | 2021-07-01 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 41750 | KG | 0.25 | 5 | Ecommerce | Concluído | 0 |
| 205 | 2021-07-15 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 51750 | KG | 0.25 | 5 | Ecommerce | Concluído | 0 |
| 206 | 2021-08-01 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 71750 | KG | 0.25 | 5 | Ecommerce | Concluído | 0 |
| 207 | 2021-08-07 | 17 | Cliente MTG | Palmas | Tocantins | Brasil | 6 | Produto TN | C | 91750 | KG | 0.25 | 5 | Ecommerce | Cancelado | 0 |
3.7 Quantas vendas encontram-se deletadas logicamente?
-- Quantas vendas encontram-se deletadas logicamente?
select
case
when deletado = 1 then 'Sim'
when deletado = 0 then 'Não'
end as `Deletado Logicamente`,
count(distinct(CdVen)) as `Quantidade de Vendas`
from erp.tbVendas
group by 1
order by `Deletado Logicamente` desc
limit 1;| Deletado Logicamente | Quantidade de Vendas |
|---|---|
| Sim | 3 |
3.8 Quantas vendas encontram-se canceladas?
-- Quantas vendas encontram-se canceladas?
select
trim(status) as `Status da Venda`,
count(distinct(CdVen)) as `Quantidade de Vendas`
from erp.tbVendas
where status like "%Cancelado%"
group by 1 ;| Status da Venda | Quantidade de Vendas |
|---|---|
| Cancelado | 6 |
3.9 Na tabela de dependentes, temos o código da Escola que o dependente estuda, precisamos além do códido da escola (INEP), saber o nome da escola de cada um dos dependentes estudam. (planilha com nome da escola em anexo)
Code to load INEP table into SQL:
drop table if exists erp.censo2020_INEP ;create table erp.censo2020_INEP (
restricao_atendimento TEXT,
Escola TEXT,
CdINEP INT,
UF TEXT,
Municipio TEXT,
Localizacao TEXT,
CatAdm TEXT,
Porte TEXT
) ;load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\Censo2020_inep.csv'
into table erp.censo2020_INEP
fields terminated by ';'
enclosed by '"'
lines terminated by '\n'
ignore 1 rows; select
t1.CdDep as `Dependente Código`,
trim(t1.NmDep) as `Dependente Nome`,
date(t1.DtNasc) as `Data de Nascimento`,
trim(t1.SxDep) as `Dependente Sexo`,
t1.CdVdd as `Vendedor Código`,
t1.INEPEscola as `Escola Código INEP`,
trim(t2.Escola) as `Escola Nome`
from erp.tbDependente t1
left join erp.censo2020_INEP t2
on t1.INEPEscola = t2.CdINEP;| Dependente Código | Dependente Nome | Data de Nascimento | Dependente Sexo | Vendedor Código | Escola Código INEP | Escola Nome |
|---|---|---|---|---|---|---|
| 1 | Dependente 1 | 2010-02-02 | Masc | 1 | 11019131 | NA |
| 2 | Dependente 2 | 2012-04-05 | Masc | 3 | 11010860 | NA |
| 3 | Dependente 3 | 2013-03-04 | Fem | 3 | 11010860 | NA |
| 4 | Dependente 4 | 2010-05-05 | Fem | 4 | 11018500 | NA |
| 5 | Dependente 5 | 2019-07-06 | Masc | 4 | 11018500 | NA |
| 6 | Dependente 6 | 2018-03-02 | Fem | 9 | 11036680 | NA |
Note que os códigos INEPEscola da base de dependentes não foram encontrados na tabela Censo2020_INEP, desse modo o campo ‘Escola Nome’ voltou com NAs ou nulos.