Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

  • 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.