Jump to content
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!!!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 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?
       
       
    • By 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; ?>  
    • By 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
    • By 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?
    • By Alberto Nascimento
      Tenho o seguinte código que faz a consulta e contagem de todos os campos de uma tabela e retorna a quantidade através de ECHO.
      Porém preciso que tenha dois critérios a seguir para então contar:
      <?php $servidor = ""; $usuario = ""; $senha = ""; $dbname = ""; $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); if(!conn) { echo "Error"; } $sql="SELECT count(id) AS total FROM tbl_test"; $result=mysqli_query($conn,$sql); $values=mysqli_fetch_assoc($result); $num_rows=$values['total']; echo $num_rows; ?> Só que preciso que primeiro encontre todos os registros que tiverem o nome "ALBERTO" no campo NOME e logo em seguida faça a contagem dos registros de acordo com o campo SITUACAO .
      Ficaria desta forma a ser exibido:
       
       
      Obrigado !!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.