Para a prova de nível médio do Bacen faltam

sexta-feira, 22 de março de 2024

trigésimo primeiro tijolo - SQL REVISÃO - SELECT, FROM, WHERE e GROUP BY

 

Em SQL, usamos o GROUP BY para indicar a coluna ( dimensão ) do agrupamento, ou seja para

enquanto o FROM é a tabela escolhida, o SELECT é a coluna ou as colunas escolhidas e o WHERE é o filtro por linhas. 

Cabe salientart que a ordem como se organiza as colunas na clásula SELECT é a ordem que irá aparecer na tela. Será a mesma ordem apresentada. Por questões de boas práticas se põe na mesma ordem no SELECT e no GROUP BY.

O GROUP BY é um agrupamento por CATEGORIAS (por exemplo você tem definido uma quantidade X de cliente em 3 categorias [gold, premium, basic], o GROUP BY pode organizar por categoria a função agregadora que você escolher tais como média, soma, contagem...).

                                                                      * * *

Ainda sobro GROUP BY se houve sub categorias você pode adiciona-las, isso causará um efeito GRANULAR e a medida que vai subcategorizando você vai granulando seus dados.

FAIXA ETÁRIA
01 - 15 // 16 - 30 // 31 - 45  // 46 - 60 // 61 - 75 // 76 -100 (Temos 5 faixa etárias)

GENEROS 

HOMENS // MULHERES // NÃO BINÁRIO // NÃO DECLARADOS (Temos 4 gêneros)

TIPOS DE GASTOS

ALIMENTAÇÃO  // VESTUÁRIO // SAÚDE // EDUCAÇÃO // LAZER (Temos 5 tipos de gastos)

A medida que quero especificar a minha amostra, ou seja dependendo do tamanho do recorte eu vou precisar agrupar mais ou menos inserindo mais ou menos colunas através do GROUP BY. 

Por exemplo: As compras de vestuário de uma mulher de 31 - 45, podem ser subcategorizadas por acessórios, por preço, por forma de pagamento.

Colunas apenas com quantidades podem ser agrupadas, mas diferente das colunas de categorias ela não tem o mesmo potencila de informações a oferecer. 

Observação importante, se usar determinada coluna no GROUP BY e ela contiver dados com datas, possivelmente será preciso usar o DATE, mas para não haver choques/conflitos será preciso usar o DATE no SELECT também. 

Não é possivel agrupar (usar o GROUP BY) com funções agregadoras (SUM // COUNT // AVG // MIN // MAX )


Resumindo:

SELECT (seleciona coluna(s))
FROM (seleciona tabela(s))
WHERE (seleciona linha(s))
GROUP BY (seleciona colunas e organiza por categoria(s)).

Vejamos um exemplo:

FASE 01

SELECT

p.product_category_name

FROM products p


FASE 02

SELECT

p.product_category_name,

COUNT( p.product_id )

FROM products p



FASE 03

SELECT

p.product_category_name,

COUNT( p.product_id ),

MIN( p.product_width_cm )

FROM products p




FASE 04

SELECT

p.product_category_name,

COUNT( p.product_id ),

MIN( p.product_width_cm ),

SUM( p.product_weight_g ),

AVG( p.product_weight_g )

FROM products p




FASE 05 (Precisei renomear para a foto ficar com uma boa qualidade em uma tamanho cada vez maior, ocupando menos espaço nas celulas dos nomes das colunas)

SELECT

p.product_category_name,

    COUNT( p.product_id ) as qty_,

    MIN( p.product_width_cm ) as min_,

    SUM( p.product_weight_g ) as sum_,

    AVG( p.product_weight_g ) as aveg_,

    MAX( p.product_height_cm ) as max_

FROM products p





FASE 06

SELECT

    p.product_category_name,

    COUNT( p.product_id ) as qty_,

    MIN( p.product_width_cm ) as min_,

    SUM( p.product_weight_g ) as sum_,

    AVG( p.product_weight_g ) as aveg_,

    MAX( p.product_height_cm ) as max_,

    COUNT( DISTINCT p.product_length_cm ) as length_

FROM products p





FASE 07 - Resultado final da minha QUERY

SELECT 
        p.product_category_name, 
       COUNT( p.product_id ), 
        SUM( p.product_weight_g ), 
        AVG( p.product_weight_g ), 
        MAX( p.product_height_cm ), 
        MIN( p.product_width_cm ), 
        COUNT( DISTINCT p.product_length_cm ) 
FROM products p 
GROUP BY p.product_category_name










Nenhum comentário:

Postar um comentário