[SQL] Retornar quantidade de linhas em um Select com group by

SQL

18/10/2017

boa tarde people td bom?

Como é possível, via SQL, saber o total de linhas retornadas por um select com group by?

por exemplo:

select V.idcliente
from vendas V
where V.data >= '10/1/2017'
    and V.data   <= '10/18/2017'
    and V.data_pagamento is null 
   group by V.idcliente


obrigado a todos!
Gladstone Matos

Gladstone Matos

Curtidas 0

Melhor post

Gladstone Matos

Gladstone Matos

24/10/2017

bom dia people obrigado a todos! ;)

segue abaixo a resposta ;)

select count(*) from 
(
  select V.idcliente
  from vendas V 
  where V.data >= '10/1/2017'
    and V.data   <= '10/18/2017'
    and V.data_pagamento is null 
    group by V.idcliente
   having count(v.idcliente) > 1
)


grande abraco
GOSTEI 1

Mais Respostas

Adriana Carvalho

Adriana Carvalho

18/10/2017

Boa noite!

Vamos ver se entendi sua dúvida: vou pegar seu exemplo como base. Você está selecionando todos os IDs de clientes que compraram (tabela vendas) entre as datas de 01 de outubro de 2017 até 18 de outubro de 2017, agrupando por cliente, ou seja, cada ID aparece uma vez só.

Porém, um cliente pode ter comprado mais de uma vez, e em mais de uma data, e você quer saber quantas vezes ele comprou, isto é, quantas vezes apareceu na tabela.

Dessa forma, poderia usar um "COUNT" no select:

select V.idcliente, COUNT(V.IdCliente) as QTD
from vendas V
where V.data >= '10/1/2017'
and V.data <= '10/18/2017'
and V.data_pagamento is null
group by V.idcliente

O resultado seria esse:

idcliente QTD
---------- ------
12907 12
203 9
4080 1

E assim por diante!

Espero ter entendido corretamente e solucionado sua dúvida!
GOSTEI 0
Gladstone Matos

Gladstone Matos

18/10/2017

ola Adriana bom dia!

Primeiramente SUPER obrigado pela ajuda!

Então, minha dúvida é 'quase' essa; Minha ideia seria retornar a quantidade total de clientes únicos; Por exemplo, digamos que a tabela tenha os dados abaixo:

idcliente data
---------- ------
12907 2/10/2017
203 5/10/2017
203 8/10/2017
9548 11/10/2017


A ideia seria retornar o resultado '3 clientes unicos compraram no periodo';

Voce tem uma ideia de como ficaria este SQL? ;)

abracos
GOSTEI 0
Huidemar Costa

Huidemar Costa

18/10/2017

Considerando a ideia do Adrifcarvalho, tente assim(colocando um "distinct" no "count" ):
select V.idcliente, COUNT(distinct V.IdCliente) as QTD
from vendas V
where V.data >= ''''10/1/2017''''
and V.data <= ''''10/18/2017''''
and V.data_pagamento is null 
group by V.idcliente
GOSTEI 0
Gladstone Matos

Gladstone Matos

18/10/2017

olá Huidemar bom dia! WOW super obrigado pelo apoio!

Infelizmente não funcionou.... Por causa do 'group by', o COUNT veio quebrado 'por linha', dessa forma:

idcliente QTD
---------- ------
12907 1
203 2
9548 1

Meu objetivo seria retornar a quantidade total de linhas - nesse caso - 3 registros ;)

q achas?
abraços
GOSTEI 0
Luiz Santos

Luiz Santos

18/10/2017

Gladstone.

Se você só quer saber a quantidade total de clientes únicos, faz assim

SELECT COUNT(DISTINCT V.IdCliente)
from vendas V
where V.data >= ''''10/1/2017''''
and V.data <= ''''10/18/2017''''
and V.data_pagamento is null 


Sem o GROUP BY
GOSTEI 0
Gladstone Matos

Gladstone Matos

18/10/2017

bom dia Luiz!

Super obrigado pelo apoio! Na verdade, não consigo usar o DISTINCT 'direto' por causa de uma expressao 'Having' (que eu acabei esquecendo de publicar no post....); Veja abaixo:

select V.idcliente
from vendas V
where V.data >= '10/1/2017'
    and V.data   <= '10/18/2017'
    and V.data_pagamento is null 
   group by V.idcliente
having count(v.idcliente) > 1


O que voce acha?
GOSTEI 0
POSTAR