Ir para conteúdo
tamabenetti

Agrupamento por categoria e subcategoria

Recommended Posts

AJUDAAAA

Pessoal eu preciso da quantidade total de itens diferentes vendidos por cliente para cada vendedor.

 

Eu tenho o seguinte:

Vendedor |                     CLIENTE                                  |  PRODUTO                                 |  data_VENDA

JOAO          |                    MERCADO  SORRISO            |                   PRESUNTO              |  01/07/2019

JOAO          |                   PADARIA SONHO                     |                    PRESUNTO             | 03/07/2019

JOAO          |                    SUPERCENTER                       |                      PRESUNTO             | 05/07/2019

JOAO          |                    SUPERCENTER                       |                      PRESUNTO             |  10/07/2019

LUIZ          |                    CONFEITARIA A                         |                     AÇUCAR                   |  15/07/2019

 

PRECISO DESSE RESULTADO:

Vendedor | Total clientes vendidos | total produtos diferentes vendidos POR CLIENTE

JOAO          |                  3                        |                    3 *

LUIZ             |                 1                       |                      1

 

*O total é 3 porque eu preciso considerar a venda do produto por cliente, e não somente por vendedor.

 

Quando eu utilizo o group by ele considera apenas o total de produtos vendidos por VENDEDOR, 

e não considera a venda para clientes diferentes.

SELECT distinct vendedor, count(distinct cliente), count(distinct produto) 
FROM FATO_VENDAS a
GROUP BY vendedor

 

Por favor me ajudem!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tamabenetti

Não é possível fazer o que você quer com apenas 1 select na base.

 

Os comandos DISTINC não funciona junto com COUNT e nem com GROUP BY.

 

O seu problema é, trazer uma lista com o nome dos Vendedores?

Trazer a quantidade de Clientes que o Vendedor possui?

Trazer a quantidade de Clientes que compra/consome o produto?

 

Vamos lá.

 

Primeiro usamos o DISTINC ou o GROUP BY para trazer os nomes dos vendedores.

SELECT DISTINC(Vendedor) FROM fato_venda

              ou

SELECT Vendedor FROM fato_venda GROUP BY Vendedor

O resultado para ambos os SELECT será:

Joao

Luiz

 

Pronto, a primeira questão esta resolvida.

Agora com o resultado deste primeiro select vamos buscar a quantidade de clientes por vendedor

 

SELECT COUNT(CLIENTE) FROM fato_venda WHERE Vendedor = "Joao";

SELECT COUNT(CLIENTE) FROM fato_venda WHERE Vendedor = "Luiz";

 

Agora temos

Joao 3

Luiz 1

 

Feito isso precisamos descobrir o nome dos produtos.

 

SELECT DISTINCT(PRODUTO) FROM fato_venda WHERE Vendedor = "Joao";

SELECT DISTINCT(PRODUTO) FROM fato_venda WHERE Vendedor = "Luiz";

 

Vamos ter de retorno 

PRESUNTO

AÇUCAR

 

Agora vamos contar quantos clientes compram/consomem cada um deles.

 

SELECT COUNT(CLIENTE) FROM fato_venda WHERE Vendedor = "Joao" AND PRODUTO = "PRESUNTO";

SELECT COUNT(CLIENTE) FROM fato_venda WHERE Vendedor = "Luiz" AND PRODUTO = "AÇUCAR";

 

Então teremos as saidas

 

Joao | 3 | 3

Luiz | 1 | 1

 

Expliquei o que precisa ser feito, agora você precisa colocar isso em uma lógica onde tudo se busque e se monte, se for em PHP fica assim:

 

<?php

$sql = "SELECT DISTINC(Vendedor) FROM fato_venda";

while($resultado = mysql_fetch_assoc(mysql(query($sql))) {

 

    $quantos_vendedores = "SELECT COUNT(CLIENTE) FROM fato_venda WHERE Vendedor = '".$resultado['DISTINCT(Vendedor)']."'";

    $count_vendedor = mysql_fetch_assoc(mysql_query($quantos_vendedores));

 

    $produtos = "SELECT DISTINCT(PRODUTO) FROM fato_venda WHERE Vendedor = '".$resultado['DISTINCT(Vendedor)']."'";

    while($nome_produtos = mysql_fetch_assoc(mysql_query($produtos))) {

        $quantos_produtos = "SELECT COUNT(CLIENTE) ROM fato_venda WHERE Vendedor = '".$resultado['DISTINCT(Vendedor)']."' AND PRODUTO = '".$nome_produtos['DISTINCT(PRODUTO)']."'";

        $count_produtos = mysql_fetch_assoc(mysql_query($quantos_produtos));

    }

    echo $resultado['DISTINC(Vendedor)']." | ".$count_vendedor['COUNT(CLIENTE)']." | ".$count_produtos['COUNT(CLIENTE)']

}

?>

 

Espero ter ajudado.

 

Se você não conseguir entender, fala qual a linguagem de programação que você quer montar isso que eu lhe ajudo.

 

Att.

Felipe Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, muito obrigada pelo retorno.

Eu tive resposta em outro forúm com a seguinte sugestão e deu certo.

 

SELECT distinct vendedor, count(distinct cliente), count(distinct CONCAT(cliente,produto)) 
FROM FATO_VENDAS a
GROUP BY vendedor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por lucianfpaula
      Galera tenha a seguinte duvida, tenho 3 tabelas onde estou trazendo os dados e preciso fazer um count em uma delas
       
      SELECT *  FROM tabela1 AS t1  INNER JOIN tabela2 AS t2 ON t1.idt1 = t2.idt2 INNER JOIN tabela3 AS t3 ON t3.idt3 = t1.idt1  
      a duvida é: quero manter o SELECT * mas também preciso de COUNT(t3.idT3)
      não sei se é possível fazer isso, mas gostaria de ter certeza antes de focar em outra solução
      desde já muito grato.
    • Por Kr3w^
      Pessoal, bom dia
       
      Estou com um problema e quebrando a cabeça para resolver.
       
      Eu preciso filtrar informação de uma tabela e somar as quantidades do período informado e trazer a quantidade total do mês para esse produto. 
       
      Segue um exemplo de como eu queria que viesse.
       
       
      Ao filtrar o período do mês 01/01/2020 a 31/12/2020 ele deveria trazer para mim a seguinte informação.
       
      Item     -     MES    -     Quantidade
      PARAFUSO  - JANEIRO - 40
      PARAFUSO  - FEVEREIRO - 20
      PARAFUSO  - MARÇO - 30
      .....
      PARAFUSO  - DEZEMBRO- 10
       
      Dentro do período informado ele trás a quantidade total do mês, porém, essa quantidade eu faço a soma pelo SUM e como eu preciso trazer o mês falar qual o mes e quantidade, ele trás mais linhas do mesmo mês, isso porque, dentro do mês ele possui registros de diversas datas, e o group by quando vê as datas diferentes não agrupam e só agrupa o que for data igual.
       
      Como posso resolver isso? Alguém tem alguma ideia?
       
       
    • Por lezão
      Boa noite!
      Td bem com vcs?
      Estou usando esse código mas não retorna nada!
       
      Alguém pode me ajudar ?
       
       
      <?php $sql = mysqli_query($link, "SELECT ver_post, COUNT(ver_post) AS Quantidade FROM tab_comentarios where ver_post = 'red' Group by ver_post"); ?> Variável
      <?php echo $Quantidade; ?>  
    • Por Leandro de Jesus
      Olá amigos muito boa tarde.
      Estou enfrentando uma situação inédita aqui pra mim.
       
      Eu tenho a seguinte SQL
       
      SELECT a.*,b.idUsuario, b.data_atualizado from px_cadastros a INNER JOIN px_cadastros_votacao b ON a.id = b.idUsuario GROUP BY b.idUsuario ORDER By b.data_atualizado DESC O problema ai que não order pela data_atualizada.
      Se eu remover o GROUP BY ai fica ordenado.
      Tentei com DISTINCT
       
      SELECT DISTINCT b.idUsuario ,a.*,b.idUsuario, b.data_atualizado from px_cadastros a INNER JOIN px_cadastros_votacao b ON a.id = b.idUsuario ORDER By b.data_atualizado DESC Dá certo, porém vem os cadastros repetidos.
       
      Alguém tem alguma luz para resolver isso?
       
      Muito obrigado
    • Por marsolim
      galera tô tentando fazer uma classificação aqui junto com um sum e não to conseguindo. até o momento consigo gerar a tabela de desempenho assim
       
         $sql = "SELECT *,SUM(pontos_total) AS totais FROM desempenho INNER JOIN usuarios ON usuarios.id = desempenho.id_usuario GROUP BY id_usuario ORDER BY totais DESC";     if($res = mysqli_query($con, $sql)){         while($row = mysqli_fetch_assoc($res)){             echo $row["nome"] . " - " . $row["totais"] . "<br>";         }     }  
      ok isso me gera uma tabela como segue
       
      jean claude van damme - 152
      bruna marquezine - 149
      bruce willis - 131
      ...
       
      o que não to conseguindo é incluir um contagem pra saber em que posição a pessoa está por exemplo se a bruna marquezine logar no sistema deve aparecer pra ela
       
      Sua pontuação: 149
      Sua posição: 2
       
      to tentando incluir uma clausula pra contar os totais maiores ou iguais ao do usuário logado e assim a quantidade de registros que retornar é a posição da pessoa.
       
      detalhe pertinente: totais é uma soma de vários subtotais espalhados pela tabela em nome de cada usuario tipo
       
      nesse cenario temos como soma dos pontos totais
       
      1 - 8
      2 - 13
      3 - 3
      4 - 7
      5 - 2
       
      alguma ideia de como posso pegar a posição apenas alterando o sql?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.