Fórum Como usar resultados de count para realizar operações? #575301
24/02/2017
0
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
Curtir tópico
+ 0Post mais votado
24/02/2017
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
Gostei + 3
Mais Posts
24/02/2017
Jones Granatyr
count() as acessos + count(interações)
Outra alternativa é utilizar variáveis
Gostei + 2
24/02/2017
Tiago Dias
Muito obrigado!
Gostei + 0
09/03/2017
David Styveen
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.
Gostei + 2
10/03/2017
Tiago Dias
Muito obrigado pela contribuição!
Esse "CTE" que você citou eu desconheço. Ele serviria para que nesse caso?
Gostei + 0
10/03/2017
David Styveen
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
Gostei + 1
13/03/2017
Tiago Dias
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
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)