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;
Table 2.1: 1 records
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;
Table 2.2: 2 records
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;
Table 2.3: 1 records
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;
Table 2.4: 6 records
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;
Table 2.5: 5 records
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
    ;
Table 2.6: 6 records
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;
Table 2.7: 6 records
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;
Table 2.8: Displaying records 1 - 10
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;
Table 2.9: 6 records
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;
Table 2.10: Displaying records 1 - 10
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 ;
Table 2.11: 9 records
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;
Table 2.12: 1 records
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`;
Table 2.13: 6 records
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`;
Table 2.14: Displaying records 1 - 10
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 ;
Table 2.15: Displaying records 1 - 10
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 ;
Table 2.16: Displaying records 1 - 10
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 ;
Table 2.17: 2 records
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" ;
Table 3.1: 1 records
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;
Table 3.2: 6 records
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' ;
Table 3.3: Displaying records 1 - 10
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') ;
Table 3.4: Displaying records 1 - 10
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
;
Table 3.5: Displaying records 1 - 10
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
;
Table 3.6: Displaying records 1 - 10
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;
Table 3.7: 1 records
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 ;
Table 3.8: 8 records
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;
Table 3.9: 1 records
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 ;
Table 3.10: 1 records
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;
Table 3.11: 6 records
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.