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

18/10/2017

0

SQL

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

Responder

Post mais votado

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

Gladstone Matos

Gladstone Matos
Responder

Mais Posts

18/10/2017

Adriana Carvalho

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!
Responder

19/10/2017

Gladstone Matos

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
Responder

19/10/2017

Huidemar Costa

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
Responder

19/10/2017

Gladstone Matos

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
Responder

19/10/2017

Luiz Santos

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
Responder

19/10/2017

Gladstone Matos

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?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar