Fórum Como usar resultados de count para realizar operações? #575301

24/02/2017

0

Fala pessoal, beleza?

Tive uma dúvida aqui mexendo no sql.

Tenho uma query que já funciona corretamente e me traz os resultados em diversos counts que eu faço

SELECT TOP 15 
COUNT() AS Acessos,
COUNT() AS Logs,
COUNT() AS Interações,
COUNT() AS Pontos ...


Meu código já traz os resultados certinho, mas eu queria fazer uma coisa que não to conseguindo fazer.

Se eu precisar Somar "Acessos" com "Interações" e diminuir isso pelo resultado de "Logs", como posso fazer isso?
Tiago Dias

Tiago Dias

Responder

Post mais votado

24/02/2017

Tiago, o exemplo a seguir considera uma tabela denominada NOMES que tem um campo TIPO que pode ser (T)itular ou (D)ependente.
Usei o COUNT() para descobrir quantos titulares eu tenho no cadastro e quantos dependentes. Ao mesmo tempo peguei a diferença de quantidade entre eles. Seria isso que tu procura?

SELECT
(SELECT COUNT(*) FROM Nomes WHERE tipo = ''T'') as ''Titulares'',
(SELECT COUNT(*) FROM Nomes WHERE tipo = ''D'') as ''Dependentes'',
((SELECT COUNT(*) FROM Nomes WHERE tipo = ''D'')-(SELECT COUNT(*) FROM Nomes WHERE tipo = ''T'')) as ''Diferença''

Alec Candia

Alec Candia
Responder

Gostei + 3

Mais Posts

24/02/2017

Jones Granatyr

Opa! Você tentou fazer o seguinte?

count() as acessos + count(interações)

Outra alternativa é utilizar variáveis
Responder

Gostei + 2

24/02/2017

Tiago Dias

Fala galera!!!!

Muito obrigado!
Responder

Gostei + 0

09/03/2017

David Styveen

Bom dia, Tiago.

Pode ser realizado da seguinte forma:
SELECT  COUNT(acesso)  + count(Interações) - count(logs)


Onde, dentro de cada COUNT ter o campo que está contando. Imaginando nesse cenário onde você terá uma tabela ou CTE com campos informando a quantidade de acesso, interações e etc.
Responder

Gostei + 2

10/03/2017

Tiago Dias

Opa Styveen,

Muito obrigado pela contribuição!

Esse "CTE" que você citou eu desconheço. Ele serviria para que nesse caso?
Responder

Gostei + 0

10/03/2017

David Styveen

Bom dia, Tiago.

CTE ( common table expression), são instruções que resultam uma tabela 'temporária'. Dessa forma você consegue fazer junções com essas tabelas, e utilizá-las para fazer insert, delete e etc.
Segue a documentação no msdn: CTE

Respondendo sua pergunta, serviria para gerar resultados específicos em tempo real sem a necessidade de criar várias views ou tabela temporária de fato (que consome recursos da tempdb), etc.

Você pode usar uma estrutura semelhante a essa:
;with total_acesso (
select id, count(*) acesso from tabela group by id
)
with total_log (
select id, count(*) log from tabela_log group by id
) select total_log.id, log + acesso total total acesso
from total_log
inner join total_acesso on total_acesso.id = total_log.id

ou então seguindo seu exemplo:

with total as (
SELECT TOP 15
COUNT() AS Acessos,
COUNT() AS Logs,
COUNT() AS Interações,
COUNT() AS Pontos ...
) select acessos + interações - log from total

Esse é um exemplo bem simples tentando atender um macro para melhor exemplificação.
Fico à disposição para maiores explicações.

Abraços
Responder

Gostei + 1

13/03/2017

Tiago Dias

Hum...

Interessante essa parada da tabela temporária...

Pelo visto parece que dá para fazer bastante coisa com isso...

Vou ler mais sobre essa parada!

Valeu Styveen
Responder

Gostei + 1

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

Aceitar