COMO AGRUPAR REGISTROS DIFERENTES SQL

Como fazer agrupamento sql por raiz do cnpj?

Como fazer agrupamento sql por raiz do cnpj?

Para isso pode ser usado substr veja abaixo como:

Sintaxe:

select substr(nome do campo, número do caractere inicial, número do caractere final) as raiz do cnpj, count(posição do array da substring) as quantidade agrupada from nome da tabela group by substr(nome do campo, número do caractere inicial,número do caractere final);

Exemplo:

Nesse caso a tabela se chama "empresa" e registra o "cnpj" apenas com números ou seja um bigint, ficaria assim:

select substr(cnpj, 1, 8) as raiz_cnpj, count(0) as quantidade_agrupada from empresa group by substr(cnpj, 1, 8);

Explicações:

Se o cnpj estivesse como varchar(18) com pontos e barras bastaria substituir o 8 no caractere final por 11. Esse número é referente a quantidade de dígitos antes dos zeros, da numeração de filial e dígitos verificadores.

O count adicionado a query é para contar quantos registros tem para aquela raiz de cnpj caso seja necessário, se não houver necessidade dessa informação, não precisa usá-lo.



Agrupamento sql como usar?

Agrupamento sql como usar?

Use a clausula GROUP BY para agrupar coluna campos com o mesmo valor.


Sintaxe:


SELECT campos agrupados ou com agregação
FROM
tabela
JOIN ligação de tabelas quando necessário
WHERE restrições da cosulta
GROUP BY campos que serão agrupados;


Exemplos:

Para saber a quantidade de notas emitidas de venda em um mês, para cada cidade seria algo como:


SELECT c.municipio as cidade,  count(v.numero_nota) as quantidade_de_venda
FROM vendas_cabecalho v  
INNER JOIN clientes c ON (c.codigo = v.cliente)
WHERE v.data >= '2020-06-01' AND v.data <= '2020-06-30'
GROUP BY c.municipio
ORDER BY count(v.numero_nota) DESC
LIMIT 3;


Resultado:

cidade quantidade_de_venda
São Paulo 123
Rio de Janeiro 102
Brasilia 86


Para saber o valor da venda total de cada cidade no mês seria algo como:


SELECT c.municipio as cidade, SUM(v.valor)
FROM vendas_cabecalho v  
INNER JOIN clientes c ON (c.codigo = v.cliente)
WHERE v.data >= '2020-06-01' AND v.data <= '2020-06-30'
GROUP BY c.municipio
ORDER BY
SUM(v.numero_nota) DESC
LIMIT 3;


Resultado:

cidade valor
São Paulo 23030,45
Rio de Janeiro 21132,35
Brasilia 18462,86


Para saber o valor da venda total de cada Bairro de Porto em um mês seria algo como:


SELECT c.municipio as cidade, c.bairro, SUM(v.valor)
FROM
vendas_cabecalho v  
INNER JOIN clientes c ON (c.codigo = v.cliente)
WHERE
v.data >= '2020-06-01' AND v.data <= '2020-06-30'AND c.municipio = 'Porto Alegre'
GROUP BY c.municipio
ORDER BY SUM(v.numero_nota) DESC
LIMIT 3;



Esse exemplo seria do MySQL, pois no Postgre daria erro.

Resultado:

cidade bairro valor
Porto Alegre Centro 4159,62
Porto Alegre Menino Deus 39416,16
Porto Alegre Bom Fim 22462,86


O agrupamento serve para juntar informações iguais e tratar outras ou não com as funções de agregação.

Quais são as funções de agregação do GROUP BY?
Como usar funções de agregação com GROUP BY?

Com o GROUP BY pode deixar apenas o conteúdo único sem repetir campos na consulta.

Pode ser usado uma ou mais colunas no GROUP BY. A forma como as colunas com conteúdos visíveis são tratadas varia um pouco em cada banco de dados. Por exemplo quando se coloca uma coluna após o SELECT no Postgre aparece um erro, no MySQL apenas se considera os valores diferentes na apresentação.

Como mostrado nos exemplos as funções de agregação servem para contar(COUNT), somar(SUM), mostrar o valor maior(MAX), ou menor(MIN), mostrar a média(AVG), entre outras coisas de um grupo de informações idênticas.



botão de compartilhamento whatsapp botão de compartilhamento no twiter botão de compartilhamento do site botão de compartilhamento no linkedin botão de compartilhamento whatsapp